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

들어가며

상위 계층에서는 저수준 예외를 잡아 자신의 추상화 수준에 맞는 예외로 바꾸어야 한다. 이를 예외 번역이라 한다. 예외를 번역할 때 저수준 예외가 디버깅에 도움이 된다면 예외 연쇄를 사용하는게 좋다. 예외 연쇄란 문제의 근본 원인인 저수준 예외를 고수준 예외에 실어 보내는 방식이다.

1
2
3
4
5
try {
...
} catch (LowerLevelException cause) {
throw new HigherLevelException(cause)
}

무턱대고 예외를 전파하는것 보다 예외 변역이 우수한 방법이지만 그렇다고 남용해서는 곤란하다. 가능하면 예외가 발생하지 않도록 하는 것이 최선이다. 때론 상위 계층 메소드의 매개변수 값을 아래 계층 메소드로 건네기 전에 미리 검사하는 방법으로 이 목적을 달성할 수 있다.

또 다른 차선책은 아례 계층에서의 예외를 피할 수 없다면 상위 계층에서 그 예외를 조용히 처리하여 문제를 API 호출자에까지 전파하지 않는 방법이 있다. 이럴 경우 예외는 로그를 통해 기록을 해두면 추후 분석에 용이하다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/08/22/Languages/Effective%20JAVA/item73/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.