도당탕탕

Item77 : 예외를 무시하지 말라 본문

JAVA

Item77 : 예외를 무시하지 말라

backlo 2023. 2. 2. 15:56

너무 뻔하지만 프로그래머가 잘 어기는 것들 중 하나가 예외를 무시한다는 것이다. API 설계자가 메소드 선언에 예외를 명시하는 까닭은, 그 메소드를 사용할 때 적절한 조치를 취해달라고 말하는 것이다.

예외를 무시하기란 아주 쉽다. try문을 감싸고 catch 블럭에 아무것도 안하면 된다. 하지만 이는 다음과 같은 행위를 무시하는 것이다.

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

물론 예외를 무시해야 할 때도 있다. 예를 들어 FileInputStream을 닫을 때가 그렇다. 파일의 상태를 변경하지 않았으니 복구할 것이 없으며, 필요한 정보는 이미 다 읽었다는 뜻이니 남은 작업을 중단할 이유도 없을 때 발생한 예외가 그렇다.

따라서 이러한 에외를 무시하기로 했다면 catch 블록 안에 그렇게 결정한 이유를 주석으로 남기고 예외 변수의 이름도 ignored로 바꿔놓도록 하자.

  • catch블록 무시하는 예제
Future<Integer> f = exec.submit(planarMap::chromationNumber);
int numColors = 4;
try {
    numColors = f.get(1L, TimeUnit.SECONDS);
} catch (TimeoutException | ExecutionException ignored) { // 이렇게 ignored 변수를 사용
    // 기본값을 사용한다 (색상 수를 최소화하면 좋지만, 필수는 아니다.)
}

이번 절의 내용은 검사와 비검사 예외에 똑같이 적용된다. 예측할 수 있는 예외 상황이든 프로그래밍 오류든, 빈 catch 블록으로 못 본 척 지나치면 그 프로그램은 어느 순간 문제의 원인과 아무 상관없는 곳에서 갑자기 죽어버릴 수 도 있다.

따라서 이와 같이 사소하더라도 예외를 무시하지 말고 잘 처리해야 한다.

Comments