카테고리 없음

[Effective Java] Item71. 필요 없는 검사 예외 사용은 피하라

📝 작성 : 2022.08.25  ⏱ 수정 : 
728x90

검사예외는 제대로 활용한다면 API와 프로그램의 질을 높일 수 있습니다. 하지만 검사 예외를 과도하게 사용하면 오히려 사용하기 불편한 API될 수 있습니다.

검사예외 회피방법

1. 비검사 예외

API를 제대로 사용해도 발생할 수 있는 예외거나, 프로그래머가 의미있는 조치를 취할 수 있는 경우가 아니라면 비검사 예외를 사용하는 것이 좋습니다.

} catch (TheCheckedException e) {
    throw new AssertionError();
}
} catch (TheCheckedException e) {
    e.printStackTrace();
    System.exit();
}

위의 두 예제와 같은 경우는 차라리 비검사 예외로 API로 만드는 것이 더 좋습니다

2. Optional

검사 예외를 던지는 대신 빈 옵셔널을 반환합니다.

단, 이 방법은 예외가 발생한 이유와 같은 부가정보를 담을 수 없습니다.

3. 메서드 쪼개기

검사 예외를 던지는 메서드를 2개로 쪼개어 비검사 예외로 바꾸는 방법입니다.

// before
try {
    obj.action(args);
} catch (TheCheckedException e) {
    // 예외 로직
}
// after
if (obj.actionPermitted(args)) {
    obj.action(args);
} else {
    // 예외 로직
}

이 경우 actionPermitted 메서드는 상태 검사 메서드에 해당하므로 주의를 기울일 필요가 있습니다.

외부 동기화 없이 여러 스레드가 접근가능하거나 외부 요인에 의해 상태가 변할 수 있다면 이런 리팩터링은 적절하지 않습니다.

반응형