반응형
📌 요약: 조건문 예외처리 | try-catch | throw 예외 발생 | assert 디버깅
🚨 예외 처리 (Exception Handling)
예외 처리란 프로그램 실행 중 발생할 수 있는 오류 상황을 사전에 감지하고 적절하게 대응하기 위한 기법입니다.
📌 조건문을 통한 예외 방지
예외가 발생하지 않도록 미리 조건으로 걸러내는 방식입니다.
cout << "두 수를 입력하세요 : ";
int value1, value2;
cin >> value1 >> value2;
if (value2 != 0)
cout << "결과는 " << value1 / value2 << endl;
else
cout << "0으로 나눌 수 없습니다" << endl;
🧱 try - catch - throw
try 블록에서 예외 발생 가능성 있는 코드를 검사하고,
throw를 통해 예외를 발생시킨 후 catch에서 처리합니다.
int value;
cin >> value;
try {
if (value < 0)
throw 5;
else if (value < 10)
throw "AAA";
cout << "예외처리 없이 도달함" << endl;
} catch (int ex) {
cout << "throw " << ex << "를 catch";
} catch (const char* ex) {
cout << "throw " << ex << "를 catch";
}
📉 함수 호출 중 예외 발생 (스택 풀기)
함수 호출 중 예외가 발생하면, 예외를 처리할 catch를 찾을 때까지 스택을 거슬러 올라갑니다.
void Func3() {
cout << "3전";
throw 0;
cout << "3후";
}
void Func2() {
cout << "2전";
Func3();
cout << "2후";
}
void Func1() {
cout << "1전";
Func2();
cout << "1후";
}
📝 exception 클래스 사용
std::exception 객체로 예외 메시지를 전달할 수 있습니다.
try {
throw exception("예외처리 메세지");
} catch(const exception& ex) {
cout << "예외처리 : " << ex.what() << endl;
}
🔍 assert 함수
assert는 디버깅 중 논리 오류를 빠르게 잡을 수 있도록 도와줍니다.
조건이 false일 때 프로그램을 강제로 종료하며 오류 메시지를 표시합니다.
cout << "배열의 크기를 입력하세요 : ";
int size;
cin >> size;
assert(!(size <= 0) && "배열은 0개 이하로 생성할 수 없습니다.");
int* array = new int[size];
delete[] array;
🤖 실행 순서
1. 조건이 거짓일 경우 assert가 프로그램 종료
2. try 블록에서 throw 발생 시, 가장 가까운 catch로 이동
3. 예외가 처리되지 않으면 프로그램 비정상 종료
반응형
'C++ > 기본' 카테고리의 다른 글
| [C++] 30. 행동패턴 (0) | 2025.03.29 |
|---|---|
| [C++] 29. 구조패턴 (0) | 2025.03.29 |
| [C++] 27. Singleton (0) | 2025.03.29 |
| [C++] 26. Template (0) | 2025.03.29 |
| [C++] 25. Pointer(3) - Smart Pointer (0) | 2025.03.29 |