C++ 예외(Exception)란 무엇인가?
예외(Exception)는 프로그램 실행 도중, 즉 런타임에 발생하는 문제 상황을 의미합니다. 예외가 발생하면 프로그램은 해당 이벤트를 던지게 되며, 이를 적절히 처리하지 않으면 프로그램이 비정상적으로 종료될 수 있습니다.
예외 처리(Exception Handling)는 이러한 문제를 안전하게 다루기 위한 메커니즘입니다. try-catch 블록을 사용하면 예외가 발생해도 프로그램이 중단되지 않고 계속 실행될 수 있도록 코드를 보호할 수 있습니다.
catch(...)로 모든 예외 잡기
C++에서 catch 키워드는 발생한 예외를 받아 처리하는 역할을 합니다. 특별히 catch(...)처럼 괄호 안에 줄임표(ellipsis)를 사용하면, 예외의 타입과 관계없이 모든 종류의 예외를 한 번에 잡을 수 있습니다.
예를 들어 int, double, char, 문자열 등 어떤 타입의 예외가 던져지더라도 catch(...) 블록이 이를 모두 처리합니다. 다만 이 방식은 실제 예외 객체에 접근할 수 없다는 점을 유의해야 하며, 필요하다면 std::exception 기반의 구체적인 catch 블록을 먼저 배치하고 마지막에 catch(...)를 두는 것이 좋습니다.
예제 코드
다음은 C++에서 모든 예외를 잡는 방법을 보여주는 예제입니다.
#include <iostream>
using namespace std;
void func(int a) {
try {
if(a==0) throw 23.33; // double 타입 예외 발생
if(a==1) throw 's'; // char 타입 예외 발생
} catch(...) { // 모든 타입의 예외를 잡음
cout << "Caught Exception!\n";
}
}
int main() {
func(0);
func(1);
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
Caught Exception! Caught Exception!
첫 번째 호출에서는 double 타입의 예외가, 두 번째 호출에서는 char 타입의 예외가 발생했지만, 두 경우 모두 catch(...) 블록이 성공적으로 예외를 잡아 프로그램이 정상적으로 종료된 것을 볼 수 있습니다.