diff --git "a/10\354\236\245/\354\225\204\354\235\264\355\205\234_73/\354\266\224\354\203\201\355\231\224_\354\210\230\354\244\200\354\227\220_\353\247\236\353\212\224_\354\230\210\354\231\270\353\245\274_\353\215\230\354\247\200\353\235\274.md" "b/10\354\236\245/\354\225\204\354\235\264\355\205\234_73/\354\266\224\354\203\201\355\231\224_\354\210\230\354\244\200\354\227\220_\353\247\236\353\212\224_\354\230\210\354\231\270\353\245\274_\353\215\230\354\247\200\353\235\274.md" new file mode 100644 index 0000000..aa4c70d --- /dev/null +++ "b/10\354\236\245/\354\225\204\354\235\264\355\205\234_73/\354\266\224\354\203\201\355\231\224_\354\210\230\354\244\200\354\227\220_\353\247\236\353\212\224_\354\230\210\354\231\270\353\245\274_\353\215\230\354\247\200\353\235\274.md" @@ -0,0 +1,23 @@ +수행하려는 일과 관련 없어 보이는 예외가 튀어나오면 +- 프로그래머 당황 +- 내부 구현 방식을 드러내어 윗 레벨 API 오염시킴 +- 다음 릴리스에서 구현 방식을 바꾸면 다른 예외가 튀어나와 기존 클라이언트 프로그램 깨짐 + +이 문제를 피하려면 **예외 번역**을 해야 한다. +- 상위 계층에서는 저수준 예외를 잡아 자신의 추상화 수준에 맞는 예외로 바꿔 던짐 + +
+ +예외를 번역할 때, 저수준 예외가 디버깅에 도움이 된다면 **예외 연쇄**를 사용하는 게 좋다. +- 문제의 근본 원인인 저수준 예외를 고수준 예외에 실어 보냄 +- 별도의 접근자 메서드(Throwable의 getCause 메서드)를 통해 저수준 예외를 꺼내볼 수 있음 +- 대부분의 표준 예외는 예외 연쇄용 생성자를 갖추고 있음 + - 그렇지 않은 예외라도 Throwable의 initCause 메서드를 이용해 '원인'을 직접 못박을 수 있음 + +
+ +무턱대고 예외를 전파하는 것보다야 예외 번역이 우수한 방법이지만, 그렇다고 남용해서는 곤란하다. +- 최선) 저수준 메서드가 반드시 성공하도록 하여 아래 계층에서는 예외가 발생하지 않도록 함 + - 상위 계층 메서드의 매개변수 값을 아래 계층 메서드로 건네기 전에 미리 검사하는 방법 있음 +- 차선) 상위 계층에서 아래 계층의 예외를 조용히 처리하여 문제를 API 호출자에까지 전파하지 않도록 함 + - 발생한 예외는 java.util.logging 같은 적절한 로깅 기능을 활용하여 기록해두면 좋음