Item 77. 예외를 무시하지 말라
1. 들어가기
“예시를 무시하지 말라”
이 말은 너무 뻔한 조언이지만 많은 프로그래머들이 지키지 않는 것 중 하나입니다.
바로 이렇게 말이죠
try {
...
} catch (SomeException e) {
}
2. catch 블록의 중요성
catch 블록을 비워두면 예외가 존재할 이유가 없어집니다.
예를 들어 건물의 화재 경보기를 끈다면 화재가 발생해도 알지 못하기에 큰 참사가 이어질 수 있습니다.
그러므로 catch 블록은 되도록 비워두지 않도록 합니다.
3. 예외를 무시해도 되는 상황
대부분 예외는 무시하지 말아야 합니다.
하지만 그 예외도 존재하는데 FileInputStream
을 닫을 때를 예로 들 수 있습니다.
입력 전용 스트림이기에 파일의 상태를 변경하지 않았으니 복구할 것이 없고,
필요한 정보는 이미 다 읽었다는 뜻이므로 남은 작업을 중단할 이유가 없기 때문입니다.
이러한 경우에는 catch 블록 안에 무시하기로 한 결정을 주석으로 남기고
예외 변수 이름도 ignored
로 바꾸도록 합니다.
Future<Integer> f = exec.submit(planarMap::chromaticNumber);
int numColors = 4; // 기본값
try {
numColors = f.get(1L, TimeUnit.SECOND);
} catch (TimeoutException | ExcutionException ignored) {
// 기본값을 사용한다.
}
4. 정리
이번 내용은 검사와 비검사 예외 모두에 적용됩니다.
빈 catch 블록을 못 본 척 지나치면 그 프로그램은 오류를 내재한 채 동작하게 됩니다.
따라서, 항상 예외를 적절히 처리하도록 하고,
정 안된다면 바깥으로 전파되어 디버깅 정보를 남길 수 있도록 합시다.
📕 개인 기록용 블로그입니다.
😊 오타나 잘못된 정보가 있을 경우 댓글이나 메일로 말씀해주시면 바로 수정하겠습니다! 😊
댓글남기기