아이템 71. 필요 없는 검사 예외 사용은 피하라 검사 예외는 꼭 필요한 곳에서만 사용하면 프로그램 안정성을 높여준다. 의미 있는 조치를 취할 수 있는 경우 제대로 사용해도 발생할 수 있는 예외인 경우 하지만 남용하면 쓰기 불편한 API가 된다 왜 쓰기 불편한지는 아이템 70참조 검사예외 회피 방법 (1) : Optional 반환 예외 발생하는 대신 Optional을 반환하면 된다. (아이템55) 단점은 예외 발생 이유. 즉 부가정보를 담을 수 없음. (예외는 부가정보 제공가능과 비교) 검사예외 회피 방법 (2) 검사 예외를 던지는 메서드를 2개로 쪼개 비검사 예외로 바꿀 수 있다. 이 방식에서 첫 번째 메서드는 예외가 던져질지 여부는 boolean값 반환 // 리팩터링 전 (검사 예외 던지는 메서드) try{ obj.action(args); }catch (TheCheckedException e){ ... // 예외상황에 대처 } // 리팩터링 후 (상태 검사 메서드와 비검사 예외를 던지는 메서드) if(obj.actionPermitted(args)) obj.action(args); } else { ... // 예외상황에 대처 } 모든 상황에 적용할 수는 없지만, 더 유연 단점 동기화 없이 여러 스레드가 동시에 접근할 수 있거나 외부 요인에 의해 상태가 변할 수 있다면 적절치않음 actionPermmitted와 action 호출 사이에 객체 상태가 변할 수도