API 설계자가 메서드 선언에 예외를 명시하는 까닭은, 그 메서드를 사용할 때 적절한 조치를 취해달라고 말하는 것이다. API 설계자의 목소리를 흘려버리지 말자.
물론 예외를 무시해야 할 때도 있다. 예를 들어 FileInputStream
을 닫을 때가 그렇다. 파일의 상태를 변경하지 않았으니 복구할 것이 없고, 필요한 정보는 이미 다 읽었기 때문에 남은 작업을 중단할 이유도 없다.
예외를 무시하기로 했다면 catch
블록 안에 그렇게 결정한 이유를 주석으로 남기고 예외 변수의 이름도 ignored
로 바꿔놓도록 하자.
Future<Integer> f = exec.submit(planarMap::chroaticNumber);
int numColors = 4;
try {
numColors = f.get(1L, TimeUnit.SECONDS);
} catch (TimeoutExeption | ExecutionException ignored) {
// 기본값을 사용한다.
}