이런 상황이 있다고 가정 해보자!
예외가 발생하면 우리는 흔히들 아래와 같이 처리한다
지금처럼 저수준 예외를 예방하거나, 스스로 처리 할 수 없는 경우
저수준 예외를 잡아, 현재 상황에 맞는 추상화 레벨로 바꿔서 던지는 것이 좋다
try {
.....
} catch (LowerLevelException e ) {
throw new HigherLevelException(..);
}
AbstractSequentialList
의 get 메소드
예외를 번역 할 때, 저수준 예외가 디버깅에 도움이 된다면, 근본원인(cause) 를 감싼 예외를 생성하여 던지는 것이 좋다.
try {
// .......
} catch (IllegalArgumentException e) {
throw new CreationFailException(e);
}
public CreationFailException(Throwable cause) { ... }
예외 연쇄는, 문제의 원인을 프로그램에서 접근할 수 있게 해 주며, 원인을 상위 레벨 예외의 스택 추적 정보에 잘 통합 해 준다.
아래와 같이 상위 레벨 예외의 스택 추적 정보에 잘 통합되어 출력되는 것을 확인할 수 있다.