Effective Java : 아이템 77. 예외를 무시하지 말라

    아이템 77. 예외를 무시하지 말라

    • 메서드를 사용할 때, 메서드 시그니쳐에 선언된 예외는 절대로 무시하면 안됨. (반드시 처리해야한다는 것을 의도한 것임) 
    • 만약 무시해도 괜찮은 예외라면, 예외 이름을 Ignore로 바꾸고 이유를 Catch 절에 주석으로 작성해야 함.

     


    메서드 시그니쳐의 예외 → 무시하지 마.

    API 설계자가 메서드를 설계할 때, 시그니쳐에 예외를 명시하는 이유는 이 API를 사용하는 사람들이 그 예외에 대한 조치를 취해달라고 요청하는 것이다. 따라서 예외가 시그니쳐에 명시된 메서드를 사용할 때는 반드시 예외에 대한 적절한 조치를 해야한다. 

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

    catch로 예외를 잡은 후, 아무런 작업을 하지 않는 경우 예외에 대한 적절한 조치 없이 프로그램이 계속 실행된다. 이렇게 되면 나중에 예외가 최초로 발생한 곳과는 전혀 다른 곳에서 예외가 발생하면서 원인을 파악하기 굉장히 어려워진다. 빠른 실패 원칙에서 벗어나게 되는데, 메서드 시그니쳐에 표시된 예외라면 반드시 Catch 절에서 적절한 조치를 취해야 한다. 

     


    예외를 무시하기로 한 경우 → 명시

    정말 특별한 경우에 예외를 무시할 수도 있을 것이다. 이런 경우에는 예외를 무시한다는 것과 무시하는 이유를 명시적으로 표기해야한다. 아래 코드로 예시를 들 수 있다. 

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

    위에서는 두 가지 방법으로 예외를 무시해야한다는 것을 명시적으로 표현했다. 

    1. 예외 변수의 이름을 Ignored로 작성하여 명시적으로 무시함. 
    2. 예외를 무시하는 이유에 대해서 Catch절에 주석으로 작성. 

    이렇게 작성되면, 예외가 발생했을 때 numColors는 기본값인 4를 사용하게 된다. 

    댓글

    Designed by JB FACTORY