실습 과제 3: 파이썬 클래스 도전문제
다음과 같은 실행 결과가 나타나는 파이썬 프로그램을 만듭니다. 다음 사항을 반드시 적용하여 코드를 작성해주세요.
- 클래스 하나 이상 정의하기
- 입력 함수 사용하기
- 예외 처리 구문 하나 이상 사용하기
계좌개설, 입금, 출금, 계좌번호 전체 출력, 프로그램 종료… 총 다섯 개의 기능 항목이 있습니다. 기능을 하나 완성할 때마다 커밋을 추가할 것을 권장합니다.
github 연결

기초 코드
class Account:
def __init__(self, acc_id, balance, name):
self._acc_id = acc_id
self._balance = balance
self._name = name
acc_arr = []
def show_menu():
print("-----Menu-----")
print("1. 계좌개설")
print("2. 입금")
print("3. 출금")
print("4. 계좌번호 전체 출력")
print("5. 프로그램 종료")
def main():
while True:
show_menu()
try:
choice = int(input("선택(1~5까지의 숫자만 입력) : "))
except ValueError:
print("\n잘못된 선택\n")
continue
print()
if choice == 5:
break
else:
print("준비중\n")
if __name__ == "__main__":
main()
commit 5단계 과정

전체 코드(python)
class Account:
def __init__(self, acc_id, balance, name):
self._acc_id = acc_id
self._balance = balance
self._name = name
def get_acc_id(self):
return self._acc_id
def deposit(self, money):
self._balance += money
def withdraw(self, money):
if self._balance < money:
return 0
self._balance -= money
return money
def show_info(self):
print(f"계좌ID: {self._acc_id}")
print(f"이름: {self._name}")
print(f"잔액: {self._balance}\n")
acc_arr = []
def show_menu():
print("-----Menu-----")
print("1. 계좌개설")
print("2. 입금")
print("3. 출금")
print("4. 계좌번호 전체 출력")
print("5. 프로그램 종료")
def make_account():
print("[계좌개설]")
try:
acc_id = int(input("계좌ID:(숫자로 입력) "))
name = input("이름: ")
balance = int(input("입금액: "))
print()
except ValueError:
print("\n입력 형식이 올바르지 않습니다.\n")
return
acc_arr.append(Account(acc_id, balance, name))
def deposit_money():
print("[입 금]")
try:
acc_id = int(input("계좌ID: "))
money = int(input("입금액: "))
except ValueError:
print("\n입력 형식이 올바르지 않습니다.\n")
return
for acc in acc_arr:
if acc.get_acc_id() == acc_id:
acc.deposit(money)
print("입금완료\n")
return
print("유효하지 않은 ID 입니다.\n")
def withdraw_money():
print("[출 금]")
try:
acc_id = int(input("계좌ID: "))
money = int(input("출금액: "))
except ValueError:
print("\n입력 형식이 올바르지 않습니다.\n")
return
for acc in acc_arr:
if acc.get_acc_id() == acc_id:
if acc.withdraw(money) == 0:
print("잔액부족\n")
return
print("출금완료\n")
return
print("유효하지 않은 ID 입니다\n")
def show_all_acc_info():
for acc in acc_arr:
acc.show_info()
def main():
while True:
show_menu()
try:
choice = int(input("선택(1~5까지의 숫자만 입력) : "))
except ValueError:
print("\n잘못된 선택\n")
continue
print()
if choice == 1:
make_account()
elif choice == 2:
deposit_money()
elif choice == 3:
withdraw_money()
elif choice == 4:
show_all_acc_info()
elif choice == 5:
break
else:
print("준비중\n")
if __name__ == "__main__":
main()
깃허브에 올리지 않을 필요 없는 파일 구분


C++
교재: Do it! C++ 완전 정복
C언어에 객체 관련 기능을 추가해 발전시킨 언어
파이썬
인터프리터 언어, 스크립트 언어
한줄씩 읽어가며 실행하는 방식으로 동작
C++
컴파일 언어
코드를 한번에(빌드) 실행 프로그램으로 만들어 놓고 실행하는 방식으로 동작
컴파일: 사람이 작성한 코드를 프로세스가 이해할 수 있는 오브젝트 코드로 변경하는 과정
링크: 각각의 소스 파일을 컴파일하여 만든 오브젝트 파일들을 하나의 실행 파일로 묶는 과정
컴파일과 링크를 거쳐 프로세스가 실행할 수 있는 파일이 만들어짐
객체지향 프로그래밍 언어
객체: 처리할 데이터와 처리 방법을 객체라는 논리 단위로 모두 포함하는 것
프로그래밍 언어
ㄴ특유의 문법 + 그것을 실행시켜주는 소프트웨어
ㄴ파이썬 문법 + 파이썬 인터프리터
ㄴC++ 문법 + C++ 컴파일러
IDE(통합 개발 환경)
파이썬: PyCharm
C++: VS, VSC
VS 설치
https://visualstudio.microsoft.com/ko/downloads/
Windows, Mac, Linux용 Visual Studio 및 VS Code 다운로드
Visual Studio IDE 또는 VS Code를 무료로 다운로드하세요. Windows 또는 Mac에서 Visual Studio Professional 또는 Enterprise Edition을 사용해 보세요.
visualstudio.microsoft.com







// ConsoleApplication1.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다.
//
#include <iostream>
int main()
{
std::cout << "Hello World!\n";
}
// 프로그램 실행: <Ctrl+F5> 또는 [디버그] > [디버깅하지 않고 시작] 메뉴
// 프로그램 디버그: <F5> 키 또는 [디버그] > [디버깅 시작] 메뉴
// 시작을 위한 팁:
// 1. [솔루션 탐색기] 창을 사용하여 파일을 추가/관리합니다.
// 2. [팀 탐색기] 창을 사용하여 소스 제어에 연결합니다.
// 3. [출력] 창을 사용하여 빌드 출력 및 기타 메시지를 확인합니다.
// 4. [오류 목록] 창을 사용하여 오류를 봅니다.
// 5. [프로젝트] > [새 항목 추가]로 이동하여 새 코드 파일을 만들거나, [프로젝트] > [기존 항목 추가]로 이동하여 기존 코드 파일을 프로젝트에 추가합니다.
// 6. 나중에 이 프로젝트를 다시 열려면 [파일] > [열기] > [프로젝트]로 이동하고 .sln 파일을 선택합니다.

// 표준 입출력 모듈을 포함하겠다는 선언
#include <iostream>
// 프로젝트의 실질적인 실행부 (진입점)
// C++에서는 들여쓰기가 선택사항이자 권장사항
// C++에서는 문장 끝날 때마다 세미콜론 필수
int main()
{
std::cout << "Hello World!";
}



https://github.com/mystous/DoItCPP
GitHub - mystous/DoItCPP: 이지스퍼블리싱의 Do It! 시리즈인 Do It! C++입문 서적의 Source Code 파일 및 정오
이지스퍼블리싱의 Do It! 시리즈인 Do It! C++입문 서적의 Source Code 파일 및 정오표등을 제공하기 위한 Repository 입니다. - mystous/DoItCPP
github.com

비주얼 스튜디오로 sln 열기

네임스페이스: 소속을 지정해주는 역할(std)
ㄴ내부 식별자에 범위를 부여해 여러 라이브러리를 포함할 때 이름이 충돌하는 것을 방지하려고 사용
using namespace std;
// 표준 입출력 모듈을 포함하겠다는 선언
#include <iostream>
using namespace std;
// 프로젝트의 실질적인 실행부 (진입점)
// C++에서는 들여쓰기가 선택사항이자 권장사항
// C++에서는 문장 끝날 때마다 세미콜론 필수
int main()
{
cout << "Hello World!";
}
//Ctrl + K, Ctrl + C 주석 처리
//Ctrl + K, Ctrl + U 주석 해제
//// 표준 입출력 모듈을 포함하겠다는 선언
//#include <iostream>
//
//using namespace std;
//
//// 프로젝트의 실질적인 실행부 (진입점)
//// C++에서는 들여쓰기가 선택사항이자 권장사항
//// C++에서는 문장 끝날 때마다 세미콜론 필수
//int main()
//{
// cout << "Hello World!";
//}
#include <iostream> //표준 모듈 불러오기
int main() {
int i, j; // C++에서의 변수 선언(타입 미리 선언)
// cout: 출력<<, cin: 입력>>
std::cout << "Enter num_1: "; // 문자열 출력
std::cin >> i; // 사용자에게 정수를 입력받아 i에 저장
std::cout << "Enter num_2: "; // 문자열 출력
std::cin >> j; // 사용자에게 정수를 입력받아 j에 저장
std::cout << "num_1 + num_2 = " << i + j << std::endl; // 두 수의 합 출력
return 0;
}
//Ctrl + K, Ctrl + C 주석 처리
//Ctrl + K, Ctrl + U 주석 해제

void: 형식 없음을 나타냄
제네릭 포인터: 어떤 변수라도 가리킬 수 있음
ㄴ제네릭 포인터에서 void는 단순히 형태가 없음이 아닌 형태가 자유로움을 의미한다고 이해하는 편이 좋음
#include <iostream>
using namespace std;
int main() {
cout << "아스키 코드 출력하기 [32 ~ 126]:\n";
for (char i = 32; i <= 126; i++)
{
cout << i << ((i % 16 == 15) ? '\n' : ' ');
}
return 0;
}





#include <iostream>
using namespace std;
int main() {
cout << "short : " << sizeof(short) << " bytes" << endl;
cout << "unsigned short : " << sizeof(unsigned short) << " bytes" << endl;
cout << "int : " << sizeof(int) << " bytes" << endl;
cout << "unsigned int : " << sizeof(unsigned int) << " bytes" << endl;
cout << "__int8 : " << sizeof(__int8) << " bytes" << endl; // MS 전용
cout << "__int16 : " << sizeof(__int16) << " bytes" << endl; // MS 전용
cout << "__int32 : " << sizeof(__int32) << " bytes" << endl; // MS 전용
cout << "__int64 : " << sizeof(__int64) << " bytes" << endl; // MS 전용
cout << "long : " << sizeof(long) << " bytes" << endl;
cout << "unsigned long : " << sizeof(unsigned long) << " bytes" << endl;
cout << "long long : " << sizeof(long long) << " bytes" << endl;
cout << "unsigned long long : " << sizeof(unsigned long long) << " bytes" << endl;
return 0;
}

#include <iostream>
using namespace std;
int main() {
cout << 9.87654321f << endl; // 실수 끝에 f를 붙이면 float 부동 소수점
cout << 987654.321f << endl;
cout << 9876543.21f << endl;
cout << 0.00000987654321f << endl;
cout << 0.00000000000987654321f << endl;
return 0;
}

#include <iostream>
#include <iomanip>
using namespace std;
int main() {
float float_value = 9.87654321f;
double double_value = 9.87654321987654321;
long double long_double_value = 9.87654321987654321l;
cout << "float : " << sizeof(float) << " bytes" << endl;
cout << "float_value : " <<
setprecision(numeric_limits<float>::digits10 + 1) <<
float_value << endl << endl;
cout << "double : " << sizeof(double) << " bytes" << endl;
cout << "double_value : " <<
setprecision(numeric_limits<double>::digits10 + 1) <<
double_value << endl << endl;
cout << "long double : " << sizeof(long double) << " bytes" << endl;
cout << "long_double_value : " <<
setprecision(numeric_limits<long double>::digits10 + 1) <<
long_double_value << endl << endl;
return 0;
}
#include <iostream>
#include
전처리기 지시문
컴파일 전에 다른 파일의 내용을 이 위치에 그대로 복사하라는 의미
#으로 시작하는 문장은 C++ 문법이 아니라 컴파일 전 단계에서 처리됨
<iostream>
표준 입출력 라이브러리 헤더
다음 기능들을 제공:
cout : 출력
cin : 입력
endl : 줄바꿈 + 버퍼 비우기
없으면 cout, endl 사용 불가
#include <iomanip>
<iomanip>
입출력 형식 제어 라이브러리
이 코드에서 사용하는 핵심 기능:
setprecision() : 출력 자릿수 설정
없으면 setprecision() 컴파일 에러 발생
using namespace std;
using
특정 이름 공간을 앞으로 생략해서 쓰겠다는 선언
namespace
이름 충돌을 막기 위한 이름 묶음 공간
std
C++ 표준 라이브러리 전체가 들어있는 네임스페이스
실제로는:
std::cout
std::endl
std::setprecision
;
문장 종료
이 줄이 없으면 매번 std::cout처럼 써야 함
int main() {
int
함수의 반환 타입
main 함수는 운영체제에 정수 값을 반환해야 함
0 → 정상 종료
main
프로그램의 시작 지점
C++ 프로그램은 반드시 main()부터 실행됨
()
함수의 매개변수 목록
비어 있음 → 입력 인자 없음
{
함수 시작 블록
float float_value = 9.87654321f;
float
단정도 부동소수점 타입
보통:
4바이트 (32bit)
약 6~7자리 정밀도
float_value
변수 이름
float 타입 값을 저장
=
대입 연산자
9.87654321
실수 리터럴
기본적으로는 double로 인식됨
f
float 리터럴임을 명시
없으면 double → float로 강제 변환 발생
;
문장 종료
double double_value = 9.87654321987654321;
double
배정도 부동소수점
보통:
8바이트 (64bit)
약 15~16자리 정밀도
숫자 뒤에 접미사 없음
기본 실수 리터럴은 double
long double long_double_value = 9.87654321987654321l;
long double
확장 정밀도 부동소수점
크기:
컴파일러/플랫폼 의존 (보통 8, 12, 16바이트)
l
long double 리터럴
소문자 l 사용 (대문자 L도 가능)
cout << "float : " << sizeof(float) << " bytes" << endl;
cout
표준 출력 스트림 객체
<<
스트림 삽입 연산자
오른쪽 값을 왼쪽 스트림으로 보냄
"float : "
문자열 리터럴
sizeof(float)
컴파일 타임 연산자
float 타입이 차지하는 바이트 수 반환
" bytes"
문자열 (단위 표시)
endl
줄바꿈 (\n)
출력 버퍼 강제 flush
setprecision(numeric_limits<float>::digits10 + 1)
setprecision
출력되는 유효 숫자 개수 설정
numeric_limits<T>
타입 T의 수치적 특성 정보 제공 클래스
numeric_limits<float>::digits10
float가 보장하는 10진수 정확 자릿수
float ≈ 6
+ 1
반올림 오차까지 확인하기 위해 1자리 더 출력
이 줄의 목적
→ float의 실제 정밀도 한계를 정확히 보기 위함
같은 구조 (double / long double)
numeric_limits<double>::digits10
numeric_limits<long double>::digits10
각 타입이 정확히 표현 가능한 최대 자릿수
return 0;
return
함수 종료 + 값 반환
0
운영체제에 전달되는 정상 종료 코드
}
main 함수 종료

데이터 형식
정수형
ㄴ정수를 표현하는 형식으로, int, short, long, long long 등이 있다.
ㄴ각 형식은 저장하는 비트 수에 따라 값의 범위가 다르다.
부동 소수점
ㄴ소수점이 있는 값을 표현하는 형식으로 float, double, long double 등이 있다.
ㄴfloat 보다 double이 높은 정밀도를 제공한다.
문자
ㄴ단일 문자를 표현하는 형식으로 char를 사용하며 작은 따옴표로 문자를 감싸 표현한다.
불리언
ㄴ참 또는 거짓을 표현하는 형식으로 bool을 사용하며, 조건문과 논리 연산에서 주로 활용한다,
보이드
ㄴ함수가 어떤 값을 반환하지 않음을 나타내며, 주로 함수의 반환 타입으로 사용한다.
#include <iostream>
using namespace std;
void print() {
// 함수 내부의 지역 변수
int value = 10;
cout << "print 함수 내부에서의 지역 변수 value: " << value << endl;
}
int main() {
// main 함수 내부의 지역 변수
int value = 5;
cout << "main 함수 내부에서의 지역 변수 value: " << value << endl;
// print 함수 호출
print();
// print 함수 호출 후에도 main 함수의 value에 영향을 주지 않음
cout << "다시 main 함수 내부에서의 지역 변수 value: " << value << endl;
return 0;
}

구문 범위 (Statement scope)
ㄴif, for 같은 단일 구문 안에서만 유효한 변수 범위
지역 범위 (Local scope)
ㄴ함수나 블록 {} 내부에서 선언되어 그 안에서만 사용 가능한 범위
전역 범위 (Global scope)
ㄴ모든 함수·파일에서 접근 가능한 프로그램 전체 범위
클래스 범위 (Class scope)
ㄴ클래스 내부에서 선언된 멤버가 클래스 이름을 통해 접근되는 범위
네임스페이스 범위 (Namespace scope)
ㄴ이름 충돌을 방지하기 위해 네임스페이스 안에서 유효한 범위
파이썬에서 대입연산자를 사용하는 기본 형태
L = R
L-value: 주로 대입 연산자 오른쪽에 나타나는 값으로, 메모리 위치를 가리키거나 수정할 수 있는 표현식
ㄴ변수 이름, 배열 요소, 클래스 멤버...
R-value: 주로 대입 연산자 왼쪽에 나타나는 값으로, 임시 값이나 메모리상에 위치가 없는 값을 가리키는 표현식
ㄴ임시 객체, 리터럴
ex)
O: a = 1;, a = b + 1;, a = b;
X: 1 = a;, b + 1 = a;
암시적 형 변환 == 자동 형 변환: 컴파일러가 자동으로
명시적 형 변환 == 강제 형 변환: 개발자가 의도적으로
리터럴: 코드에 직접 표현된 변하지 않는 값 그 자체
사용자 정의 리터럴: 리터럴을 나타내는 접미사를 함수 이름으로 만든다
ex) 반환_타입 operator"" 리터럴_접미사(매개변수_구성)
ㄴlong double operator"" _km(long double val){return val;}
#include <iostream>
using namespace std;
const long double km_per_mile = 1.609344L;
// _km 사용자 리터럴 정의
long double operator"" _km(long double val) {
return val; // km 리터럴: 아무 작업 없이 그대로 반환
}
// _mi 사용자 리터럴 정의
long double operator"" _mi(long double val) {
return val * km_per_mile; // mi 리터럴: mile을 km로 변환하여 반환
}
int main() {
long double distance_1 = 1.0_km; // km는 그대로 저장
long double distance_2 = 1.0_mi; // mile은 km 단위로 변환되어 저장
cout << distance_1 + distance_2 << " km" << endl; // km값으로 출력
return 0;
}

https://www.w3schools.com/cpp/
W3Schools.com
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
https://www.w3schools.com/cpp/exercise.asp?x=xrcise_syntax1
W3Schools.com
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
'로보테크AI' 카테고리의 다른 글
| 융합_로보테크 AI 자율주행 로봇 개발자 과정-26/02/12 (0) | 2026.02.12 |
|---|---|
| 융합_로보테크 AI 자율주행 로봇 개발자 과정-26/02/11 (0) | 2026.02.11 |
| 융합_로보테크 AI 자율주행 로봇 개발자 과정-26/02/09[Git] (0) | 2026.02.09 |
| 융합_로보테크 AI 자율주행 로봇 개발자 과정-26/02/05 (0) | 2026.02.05 |
| 융합_로보테크 AI 자율주행 로봇 개발자 과정-26/02/04 (0) | 2026.02.04 |