C++ 예외 모델

예외 처리는 오류 경로를 호출자 계약으로 끌어올린다

예외는 실패를 무시하기 어렵게 만들지만, 어디서 던지고 어디서 복구할지 정하지 않으면 제어 흐름이 흐려진다. 스택 풀기, RAII 정리, 예외 안전성 수준을 함께 읽는다.

01

실패 감지

함수가 계약을 지킬 수 없을 때 예외 타입에 원인 정보를 담아 던진다.

오류 코드 대안 검토
02

스택 풀기

호출 스택을 거슬러 올라가며 지역 객체 소멸자가 역순으로 실행된다.

RAII 소멸자 실행
03

처리 경계

의미 있게 복구하거나 사용자/로그로 변환할 수 있는 층에서 잡는다.

무작정 catch 금지
04

상태 보장

실패 후 객체가 파괴 가능하고 재사용 가능한지 예외 안전성 수준을 정한다.

basic/strong/no-throw
basic
불변식 유지 예외 후에도 누수 없이 객체가 유효하지만 값은 바뀌었을 수 있다.
최소 기준
strong
실패 시 원상 유지 copy-and-swap처럼 임시 객체로 성공 후 교체한다.
트랜잭션 감각
no-throw
절대 실패하지 않음 소멸자, swap, move는 가능한 한 noexcept가 중요하다.
컨테이너 최적화
translate
경계에서 오류 변환 라이브러리 예외를 애플리케이션 도메인 예외나 응답으로 바꾼다.
층 분리

catch 위치 · 자원 · noexcept 점검

catch 위치 복구할 수 없는 낮은 층에서 예외를 삼키지 않는지 확인한다.
자원 예외 경로에서도 락, 파일, 메모리가 RAII로 정리되는지 본다.
noexcept noexcept 함수 안에서 예외가 새면 terminate가 호출됨을 검토한다.