검사 예외를 잘 사용하면 발생한 문제를 프로그래머가 처리하여 안전성을 높여준다.
하지만 과하게 쓰면 오히려 불편하게 된다.
어떤 메서드가 검사 예외를 던질 수 있게 선언됐다면, 이를 호출하는 쪽에서 catch 블록을 두거나 바깥으로 던져서 전파해야 한다. 이는 클라이언트에게 부담을 준다. 또한 예외를 던지는 메서드는 스트림 안에서 직접 사용할 수 없기 때문에 자바 8부터 부담이 더 커졌다.
검사 예외를 회피하는 가장 쉬운 방법은 적절한 결과 타입을 담은 옵셔널을 반환하는 것이다 (아이템 55).
또 다른 방법은 검사 예외를 던지는 메서드를 2개로 쪼개 비검사 예외로 바꿀 수 있다.
리팩터링 전
try {
obj.action(args);
} catch (TheCheckedException e) {
... // 예외 상황에 대처한다.
}
리팩터링 후
if (obj.actionPermitted(args)) {
obj.action(args);
} else {
...
}
이 리팩터링을 모든 상황에 적용할 수도 없고, 리팩터링 후가 딱히 더 아름답지도 않다. 하지만 더 유연하다.