Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
TIL 7장 오류 처리
#clean_code
2년 전
566

오늘 TIL 3줄 요약

  • 오류 처리로 인해 파악하기 힘든 코드들이 생긴다.

  • 오류를 처리하면서도 코드를 파악하기 좋은 방법들이 있다.

  • 깨끗한 코드는 읽기 좋으며 안정성도 높은 코드이다.

TIL (Today I Learned) 날짜

2022.05.06

오늘 읽은 범위

7장 오류 처리

책에서 기억하고 싶은 내용을 써보세요.

  • 오류 코드보다 예외를 사용하자

    • 오류가 발생했을 때 오류 코드로 로그를 찍는 것 보다 try-catch 문으로 감싸서 예외를 던지는 것이 오류를 확인하고 코드를 읽기 더 편해진다.

  • 알고리즘와 오류를 처리하는 부분을 분리하자.

public void sendShutDown() {
	try {
		tryToShutDown();
	} catch (DeviceShutDownError e) {
		logger.log(e);
	}
}

private void tryToShutDown() throws DeviceShutDownError {
	...
}
  • 오류를 잡아내는 방법에 집중하자

    • 외부 라이브러리가 던지는 모든 예외를 try-catch 문으로 잡게 되면 예외의 형식과 무관하게 거의 동일하게 처리하게 되고 중복이 많아진다.

    ACMEPort port = new ACMEPort(12);
    
    try{
    	port.open();
    } catch (DeviceResponseException e) {
    	reportPortError(e);
    	logger.log("Device response exception", e);
    } catch (ATM1212UnlockedException e) {
    	reportPortError(e);
    	logger.log("Unlock exception", e);
    } catch (GMXError e) {
    	reportPortError(e);
    	logger.log("Device response exception", e);
    } finally {
    	...
    }
    
    • wrapper 클래스를 생성하여 외부 라이브러리와의 의존성을 줄이고 예외 유형을 정해서 더 깔끔하게 표현할 수 있다.

    Local port = new LocalPort(12);
    try{
    	port.open();
    } catch (PortDeviceFailure e) {
    	...
    } finally {
    	...
    }
    
    public class LocalPort {
    	private ACMEPort innerPort;
    
    	public LocalPort(int portNumber){
    		innerPort = new ACMEPort(portNumber);
    	}
    
    	public void open(){
    		try{
    			innerPort.open();
    		} catch (DeviceResponseException e){
    			throw new PortDeviceFailure(e);
    		} catch (... e){
    			throw new PortDeviceFailure(e);
    		} catch (... e){
    			throw new PortDeviceFailure(e);
    		} 
    	}
    }
    
  • null 을 반환하지 말자

    • null 을 반환하게 되면 null 을 확인하는 코드가 들어가게 되어 일을 늘리고 호출자에게 문제를 떠넘긴다.

  • null 을 인자로 전달하지 마라

    • null 을 인자로 전달하게 되면 NullPointerException 이 발생하지 않게 하려고 매번 인자를 검사해야한다.

    • assert 를 이용하여 해당 인자를 검증할 수도 있다.

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

비즈니스 로직과 오류 처리를 분리하기, wrapper 클래스를 만들어서 외부 라이브러리와 의존성 줄이기는 바로 적용해 볼 수 있을 것 같은 유용한 내용이었다.

다른 건 그래도 나름 신경쓰지만 예외처리 부분을 크게 신경쓰지 못하고 코드를 작성해왔던 것 같다.

예외 처리도 클린코드를 위한 중요한 부분인만큼 더 신경써서 코드를 작성해봐야겠다.