예외 처리(Exception Handling)는 프로그램 실행 중 발생할 수 있는 비정상적인 상황을 안전하게 처리하기 위한 핵심 메커니즘입니다. C++에서는 try-catch 블록을 사용해 코드를 보호할 수 있으며, 코드 블록 내 어디에서든 예외를 발생시킬 수 있습니다. 이때 예외를 던지는 데 사용되는 키워드가 바로 throw입니다.
예외 처리의 기본 동작 원리
C++의 예외 처리는 다음 세 가지 요소로 구성됩니다.
- try 블록: 예외가 발생할 가능성이 있는 코드를 감싸는 영역입니다.
- throw: 문제가 감지되면 예외를 던집니다. 문자열, 숫자 등 어떤 타입이든 예외로 사용할 수 있습니다.
- catch 블록: 던져진 예외를 받아 적절한 후속 처리를 수행합니다.
C++ throw 예제 코드
다음은 0으로 나누려는 상황에서 예외를 발생시키는 C++ 예제입니다.
#include <iostream>
using namespace std;
int display(int x, int y) {
if( y == 0 ) {
throw "Division by zero condition!";
}
return (x/y);
}
int main () {
int a = 50;
int b = 0;
int c = 0;
try {
c = display(a, b);
cout << c << endl;
} catch (const char* msg) {
cerr << msg << endl;
}
return 0;
}
실행 결과
위 코드를 컴파일하여 실행하면 다음과 같은 출력이 나타납니다.
Division by zero condition!
코드 동작 설명
display() 함수는 두 번째 인자가 0인 경우 문자열 형태의 예외를 throw합니다. main() 함수의 try 블록에서 이 함수를 호출하는데, 여기서 예외가 발생하면 나눗셈 결과를 출력하는 코드는 건너뛰고 즉시 catch(const char* msg) 블록으로 제어가 넘어갑니다. catch 블록은 전달받은 오류 메시지를 표준 에러 스트림(cerr)에 출력한 뒤, 프로그램은 정상적으로 종료됩니다.
이처럼 throw와 try-catch를 조합하면 0으로 나누기 같은 런타임 오류를 프로그램 전체의 비정상 종료 없이 우아하게 처리할 수 있습니다.