[Effective Java] 61. 추상화 수준에 맞는 예외를 던져라.

최대 1 분 소요

메서드가 하는 일과 뚜렷한 관련이 없는 예외가 발생하면 혼동스럽다. 추상화 수준이 낮은 곳에서 발생한 예외를 그대로 전달해버리면 이와 같은 일이 생긴다.

Exception Translation (예외 변환)

하위 계층에서 발생하는 예외는 상위 계층 추상화 레벨에 맞게 변환하여 던져야 한다.
이를 exception translation 이라고 한다.

// 이런 코드가 불필요한 코드가 아니다!!
try{
	...
} catch (LowerLevelException e) {
	throw new HigherLevelException();
}

Exception Chaining (예외 연결)

Excepion translation의 특별한 사례로 하위 계층의 예외를 상위 계층에게 전달한다.

try{
	...
} catch (LowerLevelException cause) {
	throw new HigherLevelException(cause);
}

상위 계층 Exception 생성자에 하위계층 Exception 객체(Throwable)를 넘겨준다. 이렇게 되면 최초 발생한 예외의 stack-trace 정보를 상위 Exception에 포함하게 된다.

예외 변환을 남용하지 말것

하위 계층 Exception을 그냥 상위계층으로 전달하는 것보다는 변환 기법이 좋지만 남용하는 것은 좋지 못하다.

가장 좋은것은 하위 계층에서 예외가 발생하지 않도록 하는 것이고, 하위 계층 예외 발생을 막을 수 없다면 이를 중간에서 catch 후 처리하여 상위 계층에게 던지지 않는 것이다.

댓글남기기