아이템 69. 예외는 진짜 예외 상황에만 사용하라 - KwangtaekJung/book-effective-java GitHub Wiki
언제 예외를 발생시킬 것인가?
-
예를 들어 상태 의존적인 메서드가 있을 때, 비정상 상태일 때 IllegalStateException을 발생시킬 것인가?
- 우선은 상태 검사 메서드를 제공(혹은 Optional)하여 호출자가 선제적으로 처리할 수 있게 해줘야 한다.
- 상태 검사 메서드 호출을 깜빡한 경우에는 상태 의존적 메서드에서 예외를 던져 버그임을 확실하게 알려준다.
-
상태 관련 예외는 이렇게 처리하면 좋을 것 같다. 그러면 다른 예외는?
- 예상이 가능한 검사 예외의 경우에는 throws에 꼼꼼히 넣어서 호출자가 try catch 문을 사용하던 더 바깥으로 전파하던 직접 처리하도록 강제해야 한다.
- 비검사 예외도 자바독의 @throws 태그 에 넣어서 문서화하면 호출자가 올바르게 사용할 수 있도록 한다. 검사 예외도 물론 자바독 문서에 포함해줘야 하고...
- 비검사 예외는 우선적으로 알고리즘적으로 발생하지 않도록 구현을 잘 해야 하고 혹시 라도 발생하게 되는 상황에서는 그냥 발생해서 버그임을 인지할 수 있게 하는 게 좋다.
- 괜히 어설프게 잡으면 버그가 겉으로 들어 나지 않아 나중에 더 큰 문제가 될 수 있고 디버깅을 더 어렵게 할 수 있다.