Home [Effective Java] Item77. 예외를 무시하지 말라!
Post
Cancel

[Effective Java] Item77. 예외를 무시하지 말라!

Item77. 예외를 무시하지 말라!

Intro

  • API 설계자가 메서드 선언에 예외를 명시하는 까닭이 뭘까? 그 메서드를 사용할 때 적절한 조치를 취하라는 것이다.
  • 예외를 try-catch 문으로 감싸고, catch 문을 비워두는 모습을 보이지 말자.

예외 무시

  • 예외는 문제 상황에 잘 대처하기 위해 존재한다. catch 블록을 비워두면 예외가 존재할 이유가 없어진다.
  • 빈 catch 문을 보면 보고만 있지 말고 처리하자.

예외를 무시해야 할 때

  • 예를 들어 FileInputStream을 닫을 때가 그렇다.

    • 입력 전용 스트림이니, 파일의 상태를 변경하지 않았을 것이고, 복구할 것이 없을 것이며, 스트림을 닫는 다는 것은 필요한 정보는 다 읽었다는 뜻이니, 남은 작업에 영향을 줄 일도 없다.
    • 예외가 자주 발생한다면 로그를 남겨 한 번 조사해보는 것도 좋을 것이다.
  • 예외를 무시하기로 했다면 catch 블록 안에 그렇게 결정한 이유를 주석으로 남기고 예외 변수의 이름도 ignored로 바꿔놓도록 하자.

    1
    2
    3
    4
    5
    6
    7
    
    Future<Integer> f = exec.submit(planarMap::chromaticNumber);
    int numColors = 4;
    try {
    	numColors = f.get(1L, TimeUnit.SECONDS);
    } catch(TimeoutException | ExecutionException ignored) {
    	// 기본값을 사용한다(색상 수를 최소화하면 좋지만, 필수는 아니다.)
    }
    

결론

  • 검사와 비검사 예외 모두에 이번 절의 내용이 적용된다.
    • 예측할 수 있는 예외 상황이든 프로그래밍 오류든, 빈 catch 블록으로 못 본척 지나치면 그 프로그램은 오류를 내재한 채 동작하게 된다.
  • 예외를 적절히 처리하여 오류를 완전히 피하자.
  • 최소한 예외를 무시하지 말고 바깥으로 전파되게라도 놔두자.
    • 그렇게만 해도 디버깅 정보를 남긴 채 프로그램이 신속히 중단되게 할 수 있다.
This post is licensed under younghwani by the author.

[Effective Java] Item76. 가능한 한 실패 원자적으로 만들라!

[Effective Java] Item78. 공유 중인 가변 데이터는 동기화해 사용하라!

Comments powered by Disqus.