반응형
상위 계층에서는 하위 계층에서 발생하는 예외를 반드시 받아서 상위 계층 추상화 수준에 맞는 예외로 바꿔서 던져야 한다. (예외 변환, exception translation)
// 예외 변환
try{
// 낮은 수준 추상화 계층 이용
...
} catch(LowerLevelException e){
throw new HigherLevelException(...);
}
// 예외 연결 지원 생성자를 갖춘 예외
class HigherLevelException extends Exception{
HigherLevelException(Throwable cause){
super(cause);
}
}
대부분 표준 예외는 예외 연결 지원 생성자를 구비하고 있다. 해당 생성자가 없다면 Throwable.initCause를 통해 하위 계층 예외를 연결할 수 있다.
예외 연결 기능을 사용하면 프로그램 안에서 예외의 원인에 접근할 수 있을 뿐 아니라 (getCause) 최초에 발생한 예외의 스택 추적 정보를 상위 계층 예외에 통합할 수 있다.
아무생각없이 아래 계층에서 생긴 예외를 밖으로 전달하기만 하는 것 보다야 예외 변환 기법이 낫지만, 남용해서는 안된다.
하위 계층에서 생기는 예외를 막을 수 없다면 Logging같은 기능을 통해 로그를 남기면 좋을 것이다.
결론
하위 계층에서 발생하는 예외를 막거나 처리할 수 없다면, 상위 계층에 보여주면 곤란한 예외는 예외 변환을 통해 처리하라.
예외 연결 패턴을 잘 사용하면 상위 계층의 예외를 보여주면서도 하위 계층의 실제 발생한 문제까지 확인할 수 있으므로 오류를 확인하기 쉽다.
반응형
'IT > Programming' 카테고리의 다른 글
<Effective Java> RULE 59 불필요한 점검지정 예외 사용은 피하라 (0) | 2023.04.26 |
---|---|
<Effective Java> RULE 60 표준 예외를 사용하라 (0) | 2023.04.26 |
<Effective Java> RULE 62 메서드에서 던져지는 모든 예외에 대해 문서를 남겨라 (0) | 2023.04.26 |
<Effective Java> RULE 63 어떤 오류인지를 드러내는 상세한 메세지를 담으라. (0) | 2023.04.26 |
<Effective Java> RULE 64 실패 원자성 달성을 위해 노력하라 (0) | 2023.04.26 |