메서드가 저수준 예외를 처리하지 않고 바깥으로 전파하면 윗 레벨 API를 오염시킨다.
try {
... // 저수준 추상화를 이용한다.
} catch (LowerLevelException e) {
throw new HigherLevelException(...);
}
상위 계층에서는 저수준 예외를 잡아 자신의 추상화 수준에 맞는 예외로 바꿔 던져야 한다. 이를 번역 예외(exception translation)이라 한다.
try {
... // 저수준 추상화를 이용한다.
} catch (LowerLevelException cause) {
throw new HighetLevelException(cause);
}
class HigherLevelException extends Exception {
HigherLevelException(Throwable cause) {
super(cause);
}
}
예외를 번역할 때 저수준 예외가 디버깅에 도움되면 근본 원인인 저수준 예외를 고수준 예외에 실어 보내도 된다.
무작정 예외를 전파하는 것보다 예외 번역이 우수한 방법이지만, 저수준 메서드가 반드시 성공해서 아래 계층에서 예외가 밠애하지 않도록 하는 것이 최선이다.