// after
if (obj.actionPermitted(args)) {
obj.action(args);
} else {
//do something
}
- 모든 상황에 적용할 수는 없다.
- actionPermitted 메서드는 상태 검사 메서드에 해당하므로 아이템 69에서 말한 단점도 그대로 적용된다.
- 외부 동기화 없이 여러 스레드가 동시에 접근할 수 있거나, 외부 요인에 의해 상태가 변할 수 있다면 이 리팩터링은 적절하지 않다.
- 각 메서드 호출 사이에 객체의 상태가 변할 수 있기 때문이다.
- 상태 검사 메서드가 action 메서드의 작업 일부를 중복 수행한다면 성능에서 손해이므로 적절하지 않다.
아이템 71. 필요 없는 검사 예외 사용은 피하라
검사 예외
장점
단점
기준
위 둘의 조건 중 어디에도 해당하지 않는다면, 비검사 예외를 활용한다.
} catch (TheCheckedException e) { e.printStackTrace(); System.exit(1); // 시스템 종료 }
회피
검사 예외를 던지는 메서드를 2개로 쪼개 비검사 예외로 변경한다.
// after if (obj.actionPermitted(args)) { obj.action(args); } else { //do something }