[교재 EffectiveJava] 아이템 77. 예외를 무시하지 말라

반응형
728x90
반응형

예외 무시

API 설계자가 메서드 선언에 예외를 명시하는 까닭은 그 메서드를 사용할때 적절한 조치를 취해달라고 말하는 것이다. 하지만 이 예외를 무시하기란 아주 쉽다. 해당 메서드 호출을 try~catch를 사용하여 무시할 수 있기 때문이다.

 

예외 무시
// catch 블록을 비워두면 예외가 무시된다.
try {
    ...
} catch (SomeException ignored) {}

예외는 문제 상황에 잘 대처하기 위해 존재하는데 catch 블록을 비워두면 예외가 존재할 이유가 사라진다. 

 

 

예외를 무시해야할 경우

예외를 무시해야 할때도 있다. 예를들어 FileInputStream을 닫을때, 파일의 상태를 변경하지 않았으니 복구할 것이 없으며, 필요한 정보는 다 읽었으므로 남은 작업을 중단할 이유도 없다. 혹시나 같은 예외가 자주 발생한다면 파일을 닫지 못했다는 로그를 남기는 것도 좋은 생각이다. 어쨌든 예외를 무시하기로 했다면 catch 블록 안에 그렇게 결정한 이유를 주석으로 남기고, 예외 변수의 이름도 ignored 로 바꿔놓도록 하자. 

 

예외 무시 - 사유 작성 
// catch 블록을 비워두면 예외가 무시된다.
try {
    ...
} catch (IgnoreException ignored) {
    // OOO 이유로 예외를 무시한다. 
}

이는 검사 예외, 비검사 예외 모두 적용된다.

 

 

정리

예측할 수 있는 예외 상황이든, 프로그래밍 오류든, 빈 catch 블록으로 못본척 지나치면 그 프로그램은 오류를 내재한 채 동작하게 되어 위험하다. 예외를 적절히 처리하여 오류를 완전히 피함으로써 치명적인 상황을 피하자. 예외를 무시하지 않고 바깥으로 전파되게만 놔둬도 최소한 디버깅 정보를 남긴채 프로그램이 신속히 중단되게 할 수도 있다.

 

 

반응형

Designed by JB FACTORY