← 질문 목록
#204깊이 0
체크 예외와 언체크 예외의 선택 기준은 무엇인가?
복구 가능 여부에 따라 결정한다. 호출자가 예외 상황을 인지하고 대처할 수 있다면 체크 예외를, 개발자의 실수나 시스템 장애라면 언체크 예외를 쓴다.
| 기준 | 체크 예외 | 언체크 예외 |
|---|---|---|
| 복구 가능성 | 높음 | 낮음 |
| 처리 강제 | 컴파일 타임 | 런타임 |
| 상속 클래스 | Exception 아래에서 RuntimeException 계열을 뺀 것 | RuntimeException 아래 |
체크 예외는 시그니처에 명시해야 하므로 호출자에게 처리 의무를 강제한다. 이렇게 하면 컴파일러가 호출한 쪽에 처리든 전파든 하나를 강제한다. 예외가 안 나게 막아 주는 것은 아니다.
반면 언체크 예외는 강제성이 없다. 널 포인터 참조나 배열 인덱스 초과 같은 논리적 오류는 코드를 수정해야 풀리는 문제지, try-catch로 잡는다고 해결되지 않기 때문이다.
최근에는 체크 예외의 과도한 사용이 코드 가독성을 해치고 의존성을 높인다는 비판이 많다. 그래서 많은 프레임워크가 언체크 예외로 래핑하여 던지는 추세다.