Skip to content

Latest commit

 

History

History

item71

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

필요 없는 검사 예외 사용은 피하라.


어떤 메서드가 검사 예외를 던질 수 있다고 선언됐다면, 이를 호출하는 코드에서는 
catch 블록을 두어 그 예외를 붙잡아 처리하거나 더 바깥으로 던져 문제를 전파해야만 한다.
어느 쪽이든 API 사용자에게 부담을 준다. 더구나 검사 예외를 던지는 메서드는 스트림안에서
직접 사용할 수 없기 때문에 자바 8부터는 부담이 더욱 커졌다.

검사 예외를 회피하는 가장 쉬운 방법은 옵셔널을 반환하는 것이다.

검사 예외를 던지는 메서드 - 리펙토링 전
try{
    obj.action(args);

} catch(TheCheckedException e) {
    ...예외상황에 대처한다.
}
상태 검사 메서드와 비검사 예외를 던지는 메서드 - 리펙토링 후
if(obj.actionPermitted(args)){
    obj.action(args);
}else{
    ...예외상황에 대처한다.
}
상태검사 메서드의 단점이 그대로 적용되기도 한다(item69에서 여러 스레드가 동시접근할 경우)

요약

검사 예외는 프로그램의 안전성을 높여주지만, 남용하면 쓰기 고통스러운 API를 낳는다. API 호추자가 예외 상호아에서 복구할 방법이 없다면 비검사 예외를 던지자. 복구가 가능하고 호출자가 그 처리를 해주길 바란다면, 우선 옵셔널을 반환해도 될지 고민하자. 옵셔널만으로는 상호아을 처리하지 못할 경우 검사예외를 던지자.