[이펙티브자바] item75. 예외의 상세 메시지에 실패 관련 정보를 담으라

wally·2022년 9월 30일
0

스택 추적

  • 프로그램 실패시 자바 시스템은 그 예외의 스택 추적(stack trace) 정보를 자동으로 출력
  • 스택추적 : 예외 객체의 toString 메서드를 호출해 얻는 무자열
  • 스택추적이 얻을 수 있는 유일한 정보이므로 실패 원인에 관한 정보를 최대한 많이 담아야 한다.
    • 예외 관여된 모든 매개변수
    • 예외 관여된 모든 필드
    • 보안 정보는 주의해야 한다(비밀번호X, 암호키 X)
    • 관련 문서와 소스코드가 있다면 중복되는 정보를 장황하게 쓸 필요는 없다.
    • 예외 상세 메시지(실패 원인파악에 필요한 정보 중요)와 최종 사용자에게 보여줄 오류 메시지(가독성 중요)를 혼동하면 안된다.

예시

/**
 * 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.upperBoudn = upperBound;
   this.index = index;
}
  • 다음과 같이 범위의 최소, 최대, 범위를 벗어난 인덱스등 실패 원인과 관련된 모든 정보를 담아라
  • 필요 정보를 예외 생성자로 받아 생성해놓는것도 하나의 방법이다

추가

  • 예외는 실패와 관련된 정보를 얻을 수 있는 접근자 메서드를 적절히 제공하면 좋다.
  • 접근자 메서든 예외 상황 복구에 유용할 수 있으므로 비검사 예외보다 검사 예외에 더 적합할것이다.
  • 하지만 기본적으로 toString 이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하자 하는 원칙에 따라 비검사 예외라도 상세정보를 알 수 있게 접근자 메서드를 제공하는 것도 나쁘지 않을거같다.
profile
클린코드 지향

0개의 댓글