클린 코드(Clean code) Day 7
독서/노개북

클린 코드(Clean code) Day 7

 

 

🔖 오늘 읽은 범위 : 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를 기준으로 작성되어있다보니, 아무래도 이해가 잘 되지않거나 실제로 적용하기 힘든 부분들이 많이 나온다. 그런 점에 있어서는 조금 아쉽다.