[책리뷰/Effective Java] 예외

OCTOBER 12, 2020

아이템75) 예외의 상세 메시지에 실패 관련 정보를 담으라

스택추적

  • 실패 원인을 분석할 때 얻을 수 있는 정보는 스택 정보인 경우가 많다.
  • 예외의 toString 메서드에 실패 원인에 관한 정보를 가능한 많이 담아 반환하는 일은 아주 중요하다.

실패 순간을 포착하려면 발생한 예외에 관여된 모든 매개변수와 필드의 값을 실패 메시지에 담아야 한다.

  • 관련 데이터를 모두 담아야 하지만 장황할 필요는 없다.
  • 예외의 상세 메시지와 최종 사용자에게 보여줄 오류 메시지를 혼동해서는 안된다.
  • 예외는 실패와 관련된 정보를 얻을 수 있는 접근자 메서드를 적절히 제공하는 것이 좋다.

java9에서 제공하는 IndexOutOfBoundsException

public class IndexOutOfBoundsException extends RuntimeException {
    private static final long serialVersionUID = 234122996006267687L;
    public IndexOutOfBoundsException() {
        super();
    }
    public IndexOutOfBoundsException(String s) {
        super(s);
    }
    public IndexOutOfBoundsException(int index) {
        super("Index out of range: " + index);
    }
}

저자가 권하는 방법

/**
 * IndexOutOfBoundsException을 생성한다
 * @param lowerBound 인덱스의 최솟값
 * @param upperBound 인덱스의 최댓값 + 1
 * @param index 인덱스의 실젯값
 */
public IndexOutOfBoundsException(int lowerBound, int upperBound, int index){
    // 실패를 포착하는 상세 메시지를 생성한다.
   super(String.format("최솟값: %d , 최댓값: %d, 인덱스: %d", lowerBound, upperBound, index));
   
   // 프로그램에서 이용할 수 있도록 실패 정보를 저장해둔다.
   this.lowerBound = lowerBound;
   this.upperBound = upperBound;
   this.index = index;
}

작업 기록 블로그