[책리뷰/Effective Java] 예외

OCTOBER 12, 2020

아이템71) 필요 없는 검사 예외 사용은 피하라

API 호출자가 예외 상황에서 복구할 방법이 없다면 비검사 예외를 던지자.
복구가 가능하고 호출자가 그 처리를 해주길 바란다면, 우선 옵셔널을 반환해도 될지 고민하자.
옵셔널만으로는 상황을 처리하기에 충분한 정보를 제공할 수 없을 때만 검사 에외를 던지자.

검사 예외 회피 방법

  • 적절한 결과 타입을 담은 Optional 반환
    — 검사 예외를 던지는 대신, 단순히 빈 옵셔널을 반환하자
    — 단점은 예외가 발생한 이유를 담을 수 없다.
  • 검사 예외를 던지는 메서드를 2개로 쪼개 비검사 예외로 변경
    단점)
    — 1. none thread-safe : actionPermitted와 action 호출 사이에 객체의 상태가 변할 수 있음
    — 2. actionPermitted 가 action 메소드의 작업 일부를 중복 수행한다면 성능 손해
//검사 예외를 던지는 메서드
try {
  obj.action(args);
} catch(TheCheckedException e) {
 ... 예외 상황에 대처
}

//상태 검사 메서드와 비검사 예외를 던지는 메서드
if(obj.actionPermitted(args)) {
  obj.action(args);
} else {
  ... 예외 상황에 대처
}

작업 기록 블로그