본문 바로가기
프로그래밍 놀이터/디자인 패턴, 리펙토링

[Effective Java] 하위 계층의 예외 처리를 신중하게 하자.

by 돼지왕 왕돼지 2017. 2. 27.
반응형

 [Effective Java] 하위 계층의 예외 처리를 신중하게 하자.


catch, Effective JAVA, exception, exception chain, exception translation, lowerlevelexception, throw new higherlevelexception, [Effective Java] 하위 계층의 예외 처리를 신중하게 하자., 가장 좋은 방법, 공개, 구현 내용, 근본적인 이유, 근원, 기록, 남용, 로깅, 매개 변숳, 메소드, 발생한 예외, 상위 계층, 성공적 실행, 시스템 장애 분석, 신중, 예오 ㅣ처리, 예외, 예외 로깅, 예외 변환, 예외 연쇄, 이디엄, 적합성, 철저히 검사, 추상체, 하위 계{층, 하위 계층, 호환성 이슈


-
상위 계층에서 하위 계층의 예외를 반드시 catch 해야 한다.
그리고 그 예외대신에 상위 계층의 추상체가 알 수 있는 예외로 바꿔 던져야 한다.
이 이디엄을 예외 변환(exception translation)이라 한다.
그렇지 않으면 구현 내용을 공개하는 것처럼 되어 나중에 호환성 이슈를 겪게 된다.


-
만약 예외 변환을 사용하면서 근본적인 이유까지 확실히 알고 싶다면 변화할 때 excpetion 을 담아서 전달할 수 있다.
예를 들어 throw new HigherLevelException( lowerLevelException ) - 예외 연쇄


-
하위 계층(저수준)에서 발생한 예외를 분별 없이 전파하는 것보다는 예외 변환을 사용하는 것이 좋지만, 예외 변환 역시 남용해서는 안 된다.
하위 계층에서 발생한 예외를 처리하는 가장 좋은 방법은, 하위 계층의 메소드가 성공적으로 실행되도록 하여 그런 예외가 생기지 않도록 하는 것이다.
상위 계층 메소드의 매개 변수를 하위 계층 메소드로 전달하기 전에 적합성을 철저히 검사함으로써 그렇게 할 수 있는 경우가 대표적인 예이다.


-
하위 계층에서 발생하는 예외를 막을 수 없을 때 그 다음으로 좋은 방법은,
상위 계층에서 하위 계층 메소드의 예외를 조용히 처리하여 상위 계층 메소드의 호출자가 하위 계층 메소드의 문제를 모르도록 하는 것이다.
적절한 로깅 기능을 사용하여 예외를 로깅 처리하는 것이 좋다.



Summary


하위 계층에서 발생한 예외를 막거나 그 자체에서 처리할 수 없다면, 예외 변환 방법을 사용하자.
예외 연쇄는 모든 경우에서 가장 좋은 방법을 제공한다.
예외 연쇄를 이용하면, 하위 계층의 예외가 발생할 때 거기에 적합한 상위 계층 예외를 던질 수 있으며,
문제의 근원이 되는 하위 계층 예외 정보를 기록하여 시스템 장애 분석에 사용할 수 있다.





반응형

댓글