티스토리 뷰
예외의 상세 메시지에 최대한 많은 것을 담자
👌 예외의 상세 메시지
예외를 잡지 못해 프로그램이 실패하면 자바 시스템은 그 예외의 스택 추적(stack trace) 정보를 자동으로 출력한다.
스택 추적은 예외 객체의 toString 메서드를 호출해 얻는 문자열로, 보통은 예외의 클래스 이름 뒤에 상세 메시지가 붙는 형태다.
이러한 상세 메시지는 실패 원인에 관한 정보를 가능한 한 많이 담아 반환하므로, 사후 분석을 위해 실패 순간의 상황을 정확히 포착해 예외의 상세 메시지에 담아야 한다.
즉, 실패 순간을 포착하려면 발생한 예외에 관여된 모든 매개변수와 필드의 값을 실패 메시지에 담아야 한다.
하지만 보안과 관련한 정보는 스택 추적 정보를 많은 사람이 볼 수 있으므로, 상세 메시지에 비밀번호나 암호 키 같은 정보까지 담아서는 안된다.
🎈 주의할 점
예외의 상세 메시지와 최종 사용자에게 보여줄 오류 메시지를 혼동해서는 안 된다.
최종 사용자에게는 친절한 안내 메시지를 보여줘야 하는 반면, 예외 메시지는 가독성보다는 담긴 내용이 훨씬 중요하다.
실패를 적절히 포착하려면 필요한 정보를 예외 생성자에서 모두 받아서 상세 메시지까지 미리 생성해놓는 방법도 괜찮다.
예를 들면 아래 코드와 같다.
/**
* 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;
}
이와 같은 코드를 작성해두면
1. 프로그래머가 던지는 예외는 자연스럽게 실패를 더 잘 포착한다.
2. 고품질의 상세 메시지를 만들어내는 코드를 예외 클래스 안으로 모아주는 효과도 있어, 클래스 사용자가 메시지를 만드는 작업을 중복하지 않아도 된다.
'Programming > Effective Java' 카테고리의 다른 글
[이펙티브자바] Item 76. 가능한 한 실패 원자적으로 만들라 (1) | 2022.08.23 |
---|---|
[이펙티브자바] Item 74. 메서드가 던지는 모든 예외를 문서화하라 (0) | 2022.08.11 |
[이펙티브자바] Item 2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2022.08.10 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- dfs
- Retrofit2
- 아이템61
- 정처기
- 알고리즘
- 순열
- docker
- 운영체제
- BFS
- bruteforce
- Container
- OS
- docker-compose
- EffectiveJava
- 완탐
- 완전탐색
- IMAGE
- 조합
- 아이템60
- springboot
- dp
- 이펙티브자바
- Java
- 백준
- BOJ
- 아이템59
- subset
- 부분집합
- 토큰기반인증
- 그래프탐색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함