Item 71. 필요 없는 검사 예외 사용은 피하라
1. 검사 예외의 장점과 단점
검사 예외는 제대로 활용하면 API와 프로그램의 안전성을 높일 수 있는 장점이 있습니다.
하지만 이를 호출하는 코드에서는 try-catch문을 통해 예외를 처리하거나 예외를 외부로 던져 문제를 전파해야 하는 문제가 있습니다.
특히 Java 8의 Stream 안에서는 직접 사용할 수 없기 때문에 그 부담은 더욱 커졌습니다.
때문에 둘의 trade-off를 잘 따져 검사 예외와 비검사 예외 둘 중 하나를 택해야 합니다.
2. 검사 예외의 대체
-
예외를 회피하는 방법
항상 예외를 만들 필요는 없습니다.
예외를 회피하는 방법도 있는데 검사 예외를 회피하는 가장 쉬운 방법은 Optional을 반환하는 것입니다.
검사 예외를 던지는 대신 단순히 빈 Optional을 반환하면 되는데 이 방법의 단점은 예외가 발생한 이유를 알려주는 부가 정보를 담을 수 없다는 것입니다.
또한, 성능 저하가 있을 수 있기에 성능이 중요한 프로그램에서는 사용할 수 없습니다.
-
비검사 예외로 변환
상태 검사 메서드를 통해 검사 예외를 비검사 예외로 변환할 수도 있습니다.
// 검사 예외를 던지는 메서드 try { obj.action(args); } catch (TheCheckedException e) { ... }
// 비검사 예외를 던지는 메서드 if (obj.actionPermitted(args)) { obj.action(args); } else { // 예외 처리 }
하지만 상태 검사 메서드는 외부 요인에 의해 객체 상태가 변하는 경우, 정상 동작하지 않으니 주의해야 합니다.
3. 정리
검사 예외는 프로그램의 안전성을 높여주지만, 남용하면 API 호출자가 일일이 예외처리를 해줘야 하므로 쓰기 힘든 API를 만듭니다.
API 호출자가 예외 상황에서 복구할 방법이 없으면 비검사 예외를 던지고, 복구가 가능하고 API 호출자가 그 처리를 해주길 바란다면, Optional을 고려해봅시다.
하지만 Optional로 처리하기 힘들다면 검사 예외로 처리해야 합니다.
📕 개인 기록용 블로그입니다.
😊 오타나 잘못된 정보가 있을 경우 댓글이나 메일로 말씀해주시면 바로 수정하겠습니다! 😊
댓글남기기