검사 예외는 제대로 활용하면 api와 프로그램의 질을 높일 수 있다. 검사 예외는 발생한 문제를 프로그래머가 처리하여 안정성을 높이게끔 해준다. 물론 검사 예외를 사용하면, 오히려 쓰기 어려운 api가 된다. 어떤 메서드가 검사 예외를 던질 수 있다고 선언됐다면, 이를 호출하는 코드쪽에서 반드시 그 예외를 처리해 주어야 한다. 이를 붙잡아(catch) 처리하거나 혹은 더 바깥으로 던져 문제를 전파해야된다.
검사 예외를 회피하는 가장 쉬운 방법은 적절한 결과 타입을 담은 옵셔널을 반환하는 것이다. 검사 예외를 던지는 대신에 단순히 빈 옵셔널을 반환하면 된다. 이 방식의 단점은 예외가 발생한 이유를 알려주기 어렵다는 것이다.
혹은 두개의 메서드로 쪼개는 방법 이있다
// 리펙토링 전 메서드
try {
obj.action(args);
} catch (TheCheckedExcpetion e) {
// ...
}
// 리펙토링 후 메서드
if(obj.actionPermitted(args)) {
obj.action(args);
} else {
// ...
}
이렇게 예외 케이스인지 검사하는 메서드를 추가하고 예외 케이스인경우에는 런타임 익셉션(Unchecked exception)으로 해결하는 방법도 있다.
이 방식을 모든 코드에 적용할 수는 없지만, 훨씬 유연한 구조임은 사실이다.
꼭 필요한 곳에만 사용한다면 검사 예외는 프로그램의 안정성을 높여준다, 하지만 남용한다면 쓰기 고통스러운 API를 낳는다. API의 호출자가 예외 상황에서 복구할 방법이 없다면 비검사 예외를 던지자.