exception basics

예외는 오류 발생 지점과 처리 지점을 분리한다

std::bad_alloc, std::out_of_range, throw, catch, main 전파는 실패를 값 반환과 다른 경로로 보냅니다.

기존 방식

오류 반환값의 모호성

호출자가 매번 확인하지 않으면 실패가 조용히 지나갑니다.

throw

오류 상황을 만난 지점에서 예외 객체를 던집니다

정상 반환 경로와 분리되어 코드 의도가 뚜렷해집니다.

catch

처리 가능한 위치에서 예외 타입에 맞춰 받습니다

여러 계층을 건너뛴 오류도 한 곳에서 다룰 수 있습니다.

전파

예외 전파 방향

끝까지 잡히지 않으면 프로그램 종료로 이어집니다.

할당 실패 new는 메모리 부족에서 std::bad_alloc을 던질 수 있습니다.
범위 오류 vector::at은 잘못된 인덱스에서 std::out_of_range를 던집니다.
assert 개발 중 가정 확인에는 assert가, 실행 중 오류 복구에는 예외가 더 어울립니다.