🔖 오늘 읽은 범위 : 7장 오류처리
🙂 책에서 기억하고 싶은 내용을 써보세요.
일일히 다양한 유형의 오류를 점검하는 방식 보다는 오류 발생시 예외를 던지자.
Try-Catch-Finally 문을 사용하자.
먼저 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하게 코드를 작성하는 방법을 권장한다. 그러면 자연스럽게 try 블록의 트랜잭션 범위부터 구현하게 되므로 범위 내에서 트랜잭션 본질을 유지하기 쉬워진다.
null을 반환하는것을 피하자.
사용하려는 외부 API가 null을 반환한다면 *감싸기 메서드를 구현해 예외를 던지거나 특수 사례 객체를 반환하는 방식을 고려한다.
*감싸기 메서드
자바에서는 다양한 유형의 에러가 발생한다. 이 모든 유형의 에러를 잡기위해서는 catch문이 늘어나게된다.
public void open() {
try{
innerPort.open();
}catch(DeviceResponseException e){
...
}catch(NetworkErrorException e){
...
}catch(BindingException e){
...
}
}
innerPort.open()을 사용하는 곳마다 위와 같은 에러처리를 해준다면 코드가 더러워질 것이다.
LocalPort port = new LocalPort(12);
try{
port.open();
}catch(PortDeviceFailure e){
reportError(e);
logger.log(e.getMessage(), e);
}finally{
...
}
public class LocalPort {
private ACMEPort innerPort;
public void open(){
try{
innerPort.open();
}catch(DeviceResponseException e){
throw new PortDeviceFailuer(e);
}catch(NetworkErrorException e){
throw new PortDeviceFailuer(e);
}catch(BindingException e){
throw new PortDeviceFailuer(e);
}
}
}
LocalPort 클래스 안에서 api를 호출하고 그 과정에서 오류가 생기면 한가지 유형의 예외만을 발생시키도록 설정했다. 이후 LocalPort를 사용할때는 catch문으로 하나의 예외만을 잡아내면 되므로 코드가 훨씬 간편해진다. 이를 감싸기 클래스라고 한다.
🤔 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요.
실무를 하면서 항상 느끼는 것이 예외처리가 너무 미숙하다는 것이었다. 예외처리에 빈틈이 생기면 프로그램 자체가 돌아가지 않을 때가 있고 나비효과처럼 전혀 생각지도 못한 곳에 영향을 줘서 그 원인을 찾기 힘들어지기도 한다. api 호출시에는 이제 습관처럼 try-catch문을 사용하려고 노력중인데, 가끔 200 코드로 에러상황을 던져줄 때가 있다. 이럴때는 처리가 난감해진다.
이 책이 JAVA를 기준으로 작성되어있다보니, 아무래도 이해가 잘 되지않거나 실제로 적용하기 힘든 부분들이 많이 나온다. 그런 점에 있어서는 조금 아쉽다.