예외를 잡지 못해 프로그램이 실패하면 스택 추적(stack trace)가 출력된다. 스택 추적은 예외 객체의 toString
메서드를 호출해 얻는 문자열이다.
만약 실패를 재현하기 어려우면 자세한 정보를 얻기가 어렵다. 그래서 실패 원인에 관한 정보를 가능한한 많이 담아야 한다.
예를들어, IndexOutOfBoundsException
의 상세 메시지에는 범위의 최소값과 최댓값, 그리고 인덱스 값을 담아야한다. 인덱스가 잘못 됐을 수도 있고, 최소 값이 최대값보다 클 수도 있다.
실패 순간을 포착하려면 발생한 예외에 관여된 모든 매개변수와 필드의 값을 실패 메시지에 담아야 한다.
예외의 상세 메시지와 최종 사용자에게 보여줄 오류 메시지를 혼동해서는 안된다. 최종 사용자에게는 친절한 메시지를 보여주고, 예외 메시지는 가독성보다 담긴 내용이 중요하다.
예외는 실패와 관련한 정보를 얻을 수 있는 접근자 메서드를 적절히 제공하는 것이 좋다. 포착한 실패 정보로 옛외 상황을 복구할 수 있으므로 접근자 메서드는 unchecked exception 보다는 checked exception에서 더 유용할 것이다. 하지만 toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하자
원칙에 따라 unchecked exception도 접근자 메서드를 제공하면 좋을 것이다.