Home [Effective Java] Item75. 예외의 상세 메시지에 실패 관련 정보를 담으라!
Post
Cancel

[Effective Java] Item75. 예외의 상세 메시지에 실패 관련 정보를 담으라!

Item75. 예외의 상세 메시지에 실패 관련 정보를 담으라!

Intro

  • 예외를 잡지 못해 프로그램이 실패하면 자바 시스템은 그 예외의 스택 추적 정보를 자동으로 출력한다.

    1
    
    System.out.println(e.printStackTrace());
    
  • 스택 추적은 예외 객체의 toString 메서드를 호출해 얻는 문자열이다. 보통 예외의 클래스 이름 뒤에 상세 메시지가 붙는 형태다.

  • 이 스택 추적 정보가 실패 원인 분석을 위해 얻을 수 있는 유일한 정보인 경우가 많다. 더구나 그 실패 재현이 어렵다면 더 자세한 정보를 얻기가 어렵거나 불가능하다.

  • 따라서 toString 메서드에 실패 원인에 관한 정보를 가능한 한 많이 담아 반환하는 일은 아주 중요하다.

실패 메시지

  • 실패 순간을 포착하기 위해 예외에 관여한 모든 매개변수와 필드의 값을 실패 메시지에 담아야 한다.
  • 관련 데이터를 모두 담아야 하지만 장황할 필요는 없다. 보통 발생한 예외를 수정하기 위해 스택 추적뿐 아니라 관련 문서와 소스 코드를 함께 살펴보기 때문에, 문서나 소스 코드에서 충분히 얻을 수 있는 정보까지 늘어놓는 것은 큰 도움이 안 된다.
  • 예외의 상세 메시지와 최종 사용자에게 보여줄 오류 메시지를 혼동하지 말자. 최종 사용자에게는 친절한 안내 메시지를 보여줘야 하겠지만, 예외 메시지의 주 소비층은 문제를 분석해야 할 프로그래머이기 때문에 예외 메시지의 가독성보다는 담긴 내용에 신경써야 한다.
  • 실패를 적절히 포착하기 위해 필요한 정보를 예외 생성자에서 모두 받아 상태 메시지를 미리 생성해놓은 방법도 괜찮다.

접근자 메서드

  • 예외는 실패와 관련한 정보를 얻을 수 있는 접근자 메서드를 적절히 제공하는 것이 좋다.
  • 포착한 실패 정보는 예외 상황 복구에 더 유용할 수 있으므로, 접근자 메서드는 비검사 예외보다는 검사 예외에 더 유용하다.
    • ‘toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하자’는 일반 원칙이 있다. 이 원칙에 따라 비검사 예외라도 상세 정보를 알려주는 접근자 메서드를 제공하는 것을 권장한다.
This post is licensed under younghwani by the author.

[Effective Java] Item74. 메서드가 던지는 모든 예외를 문서화하라!

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

Comments powered by Disqus.