Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Item 75. 예외의 상세 메세지에 실패 관련 정보를 담아라 #76

Open
yejin9858 opened this issue Aug 29, 2023 · 0 comments
Assignees

Comments

@yejin9858
Copy link

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

  • 이 정보가 실패 원인을 분석하는 유일한 정보인 경우가 많다.
  • 실패를 재현하기 어렵다면 더 자세한 정보를 얻기 어렵거나 불가능한다.

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

사후 분석을 위해 실패 순간의 상황을 정확히 포착해 예외의 상세 메시지에 담자.

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

ex) IndexOutOfBoundsException

범위의 최댓값, 최솟값, 범위를 벗어난 인덱스의 값을 담으면 좋다.

  • 최솟값이 최댓값보다 큰 내부의 불변식이 심하게 깨진 경우

하지만 실제로는 범위를 벗어난 인덱스만 제공하고 있긴 하다.

+) 하지만 비밀번호를 담지는 말자. 보안에 주의

스택 추적이 있으므로 관련 데이터를 모두 담으면 좋지만 너무 장황할 필요는 없다. 어차피 관련 문서와 소스코드를 찾아봐야 한다.

예외의 상세 메시지와 최종 사용자에게 보여줄 오류 메시지를 혼동해서는 안된다

  • 최종 사용자 : 친절한 안내 메세지
  • 예외 메시지 : 가독성보다는 담긴 내용이 더 중요, 번역 필요 X

자바 라이브러리에서 이 조언을 적극 수용하지는 않지만, 저자는 강력히 권장한다.

  • 예외가 실패를 포착하기 쉽다.
  • 고품질의 상세메세지를 만들어내는 코드를 예외 클래스 안으로 모아주는 효과도 있어, 중복이 제거된다.

예외는 실패와 관련된 정보를 얻을 수 있는 접근자 메서드를 적절히 제공하는 것이 좋다.(Item 70 참고)

포착한 실패 정보는 예외 상황을 복구하는 데 유용할 수 있으므로 접근자 메서드는 비검사 예외보다는 검사 예외에서 더 빝을 발한다.

하지만, ‘toString이 반환한 값에 포함된 정보를 얻어올 수 있는 API를 제공하자’는 일반원칙을 따른다는 점에서 비검사 예외라도 상세 정보를 알려주는 접근자 메서드를 제공하는 것을 권장한다.

@yejin9858 yejin9858 self-assigned this Aug 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant