You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
모든 상황에 적용할 수 있는 리팩토링은 아니지만, 더 쓰기 편한/ 유연한 API를 제공할 수 있다.
메서드가 성공할 것을 알거나 실패시 스레드를 중단하길 원한다면 obj.action(args)로 한 줄로 작성할 수 있다.
⚠️ 주의
actionPermitted는 상태 검사 메서드에 해당하므로 주의해야한다. 외부 동기화 없이 여러 스레드가 동시에 접근할 수 있거나, 외부 요인에 의해 상태가 변화할 수 있다면 이 리팩토링은 적절하지 않다. (actionPermitted와 action 호출 사이에 객체 상태가 변할 수 있다)
actionPermitted가 action의 작업 일부를 중복 수행하면 성능면에서 손해라 리팩터링이 적절하지 않다.
핵심 정리
검사 예외는 꼭 필요한 곳에서만 사용하자!
API 호출자가 예외 상황에서 복구할 방법이 없다면 비검사 예외 사용
복구가 가능하고 호출자가 처리를 해주길 바란다면 옵셔널 사용
옵셔널만으로는 충분한 정보를 제공할 수 없을 때 검사 예외 사용
The text was updated successfully, but these errors were encountered:
[ Item71 ] 필요 없는 검사 예외 사용은 피하라
검사 예외 vs 비검사 예외
자바 Throwable
검사 예외(Checked Exception / Compile Time Exception)
예) IOException, NoSuchFieldException ...
비검사 예외(Unchecked Exception / Runtime Exception)
예) NullPointerException, IndexOutOfBoundsException...
더 자세한 정보는 https://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html 공식 문서를 참고하자.
검사 예외
검사 예외는 발생한 문제를 프로그래머가 처리하기 때문에 안정성을 높일 수 있다.
하지만! 검사 예외를 과하게 사용하면 쓰기 불편한 API가 된다.
=> 그래서, API를 제대로 사용해도 발생할 수 있는 예외가 있거나 프로그래머가 예외에 대한 의미 있는 조치를 취할 수 있는 경우가 아니라면 비검사 예외를 사용하는 것이 좋다.
검사 예외 회피
적절한 결과 타입을 담은 Optional 반환
빈 Optional을 반환한다
하지만, 이 방법으로는 예외가 발생한 이유를 알려주는 부가 정보를 담을 수 없다 (예외를 사용하면 구체적인 예외 타입 & 부가 정보를 제공할 수 있다)
검사 예외를 던지는 메서드를 2개로 쪼개 비검사 예외로 바꾼다
모든 상황에 적용할 수 있는 리팩토링은 아니지만, 더 쓰기 편한/ 유연한 API를 제공할 수 있다.
메서드가 성공할 것을 알거나 실패시 스레드를 중단하길 원한다면 obj.action(args)로 한 줄로 작성할 수 있다.
핵심 정리
The text was updated successfully, but these errors were encountered: