API 설계자가 메서드 선언에 예외를 명시하는 이유는 적절한 조치가 필요하기 때문이다.
try로 감싼 뒤, catch 블록에서 아무 일도 하지 않는 일은 절대 하지 말자.
회사에 입사해서 catch 블록을 비워놓고 예외를 무시하는 코드를 인수인계 받는다면?
try {
// ...
} catch (SomeException e) {
// Empty
}
catch 블록은 문제 상황에 잘 대처하기 위해 존재한다. 비워두면 예외가 존재할 이유가 없어진다.
빈 catch 블록을 목격한다면 머리 속에 🚨사이렌🚨을 울려야 한다.
FileInputStream을 닫을 때와 같은 경우는 예외를 무시할 수 있지만,
혹시 무시할 경우에는 catch 블록안에 그렇게 결정한 이유를 남기고 예외 변수 이름도 ignored로 바꿔 놓아야 한다.
Future<Integer> f = exec.submit(planarMap::chromaticNumber);
int numColors = 4; // 기본값. 어떤 지도라도 이 값이면 충분하다
try {
numColors = f.get(1L, TimeUnit.SECONDS);
} catch (TimeOutException | ExcutionException ignored) {
// 기본값을 사용한다(색상 수를 최소화하면 좋지만, 필수는 아니다)
}
예외를 처리하지 않을 경우 프로그램을 오류를 내재한채 동작한다.
그러다 어느 순간 문제의 원인과 아무 상관없는 곳에서 갑자기 죽을 수도 있다. 오류를 당장 처리할 수 없다면 적어도 바깥으로 전파해야 한다.
예외를 던지고 catch를 하지 않는 것은 가장 피해야할 작업이며 최소한 System.err.println()으로 어떤 오류인지라도 파악할 수 있도록 만들자.