Item77. 예외를 무시하지 말라!
Intro
- API 설계자가 메서드 선언에 예외를 명시하는 까닭이 뭘까? 그 메서드를 사용할 때 적절한 조치를 취하라는 것이다.
- 예외를 try-catch 문으로 감싸고, catch 문을 비워두는 모습을 보이지 말자.
예외 무시
- 예외는 문제 상황에 잘 대처하기 위해 존재한다. catch 블록을 비워두면 예외가 존재할 이유가 없어진다.
- 빈 catch 문을 보면 보고만 있지 말고 처리하자.
예외를 무시해야 할 때
예를 들어 FileInputStream을 닫을 때가 그렇다.
- 입력 전용 스트림이니, 파일의 상태를 변경하지 않았을 것이고, 복구할 것이 없을 것이며, 스트림을 닫는 다는 것은 필요한 정보는 다 읽었다는 뜻이니, 남은 작업에 영향을 줄 일도 없다.
- 예외가 자주 발생한다면 로그를 남겨 한 번 조사해보는 것도 좋을 것이다.
예외를 무시하기로 했다면 catch 블록 안에 그렇게 결정한 이유를 주석으로 남기고 예외 변수의 이름도 ignored로 바꿔놓도록 하자.
1 2 3 4 5 6 7
Future<Integer> f = exec.submit(planarMap::chromaticNumber); int numColors = 4; try { numColors = f.get(1L, TimeUnit.SECONDS); } catch(TimeoutException | ExecutionException ignored) { // 기본값을 사용한다(색상 수를 최소화하면 좋지만, 필수는 아니다.) }
결론
- 검사와 비검사 예외 모두에 이번 절의 내용이 적용된다.
- 예측할 수 있는 예외 상황이든 프로그래밍 오류든, 빈 catch 블록으로 못 본척 지나치면 그 프로그램은 오류를 내재한 채 동작하게 된다.
- 예외를 적절히 처리하여 오류를 완전히 피하자.
- 최소한 예외를 무시하지 말고 바깥으로 전파되게라도 놔두자.
- 그렇게만 해도 디버깅 정보를 남긴 채 프로그램이 신속히 중단되게 할 수 있다.
Comments powered by Disqus.