본문 바로가기
C++/기본

[C++] 28. Exception

by 위니밍 2025. 3. 29.
반응형
📌 요약: 조건문 예외처리 | 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