IT/Programming / / 2023. 4. 26. 13:30

<Effective Java> RULE 61 추상화 수준에 맞는 예외를 던져라

반응형

 

상위 계층에서는 하위 계층에서 발생하는 예외를 반드시 받아서 상위 계층 추상화 수준에 맞는 예외로 바꿔서 던져야 한다. (예외 변환, exception translation)

// 예외 변환
try{
    // 낮은 수준 추상화 계층 이용
    ...
} catch(LowerLevelException e){
    throw new HigherLevelException(...);
}
 
// 예외 연결 지원 생성자를 갖춘 예외
class HigherLevelException extends Exception{
    HigherLevelException(Throwable cause){
        super(cause);
    }
}
 

대부분 표준 예외는 예외 연결 지원 생성자를 구비하고 있다. 해당 생성자가 없다면 Throwable.initCause를 통해 하위 계층 예외를 연결할 수 있다.

 

예외 연결 기능을 사용하면 프로그램 안에서 예외의 원인에 접근할 수 있을 뿐 아니라 (getCause) 최초에 발생한 예외의 스택 추적 정보를 상위 계층 예외에 통합할 수 있다.

 

아무생각없이 아래 계층에서 생긴 예외를 밖으로 전달하기만 하는 것 보다야 예외 변환 기법이 낫지만, 남용해서는 안된다.

하위 계층에서 생기는 예외를 막을 수 없다면 Logging같은 기능을 통해 로그를 남기면 좋을 것이다.

 

결론

하위 계층에서 발생하는 예외를 막거나 처리할 수 없다면, 상위 계층에 보여주면 곤란한 예외는 예외 변환을 통해 처리하라.

예외 연결 패턴을 잘 사용하면 상위 계층의 예외를 보여주면서도 하위 계층의 실제 발생한 문제까지 확인할 수 있으므로 오류를 확인하기 쉽다.

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유