본문 바로가기

IT/클린코드

[클린코드] 7장 오류처리

안녕하세요 남갯입니다


오늘은 클린코드의 오류처리에 대해 포스팅 해보려고 합니다.


깨끗한 코드와 오류처리에는 연관성이 있고 상당수의 코드기반은 전적으로 오류 처리 코드에 좌우된다.


오류처리는 중요하고 오류처리로 인해 프로그램 논리를 이해하기 어려워 진다면 깨긋한 코드라 부르기 어렵다.




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


if문을 통해 Device의 멈춤 강태를 확인하는 코드는 복잡해진다. 함수를 호출한 즉시 오류를 확인해야 하기 때문이다. 

그래서 이 단계를 잊어버리기 쉽다. 그래서 오류가 발생하면 예외를 던지는것이 낫다.

그냥 try catch문을 통해 오류를 처리하는것이 낫다.


public void sendShutDown() {
try {
tryToShutDown();
} catch (DeviceShutDownError e) {
logger.log(e);
private void tryToShutDown () throws DeviceShutDownError {
DeviceHandle handle = getHandle(DEVl);
DeviceRecord record = retrieveDeviceRecord(handle);
pauseDevice(handle);
clearDeviceWorkQueue(handle);
closeDevice(handle);
}
}
}


try-Catch-Finally 문부터 작성하라.

try-catch-finally문에서 try 블록에 들어가는 코드를 실행하면 어느 시점에서든 실행이 중단된 후 catch 블록으로 넘어 갈 수 있다.



미확인 예외를 사용하라.

확인된 예외는 OCP를 위반한다. 메서드에서 확인된 예외를 던졌는데 catch블록이 세 단계 위에 있다면 그 사이 메서드 모두가 선언부에 해당예외를 정의해야한다. 이 말은 하위단계 코드가 변경하면 상위단계 메서드 선언부를 고쳐야 한다는 말이다.

하나가 throws 절을 추가하면 호출하는 함수 모두가 try catch문을 통해 예외를 정의해야한다.


예외에 의미를 제공하라

오류메세지에 정보를 담아 예외와 함께 던진다.


호출자를 고려해 예외 클래스를 정의하라.

어플리케이션에서 오류를 정의할 때 프로그래머에게 가장 중요한 관심사는 오류를 잡아내는 방법이 되어야한다.


정상의 흐름을 반환하라.

 

null을 반환하지 마라.

오류를 유발하는 행위는 null을 반환하는 습관이다. 컬렉션이라면 null이 아닌 빈값의 array라도 반환해라


null을 전달하지 마라

메서드에서 null을 반환하는 방식도 나쁘지만 메서드로 null을 전달하는 방식은 더 나쁘다. 

정상적인 인수로 null을 기대하는 api가 아니라면 메서드로 null을 전달하는 코드는 최대한 피한다.


대다수의 프로그래밍은 null을 적절하게 처리하는 방법이 없다 그래서 애초에 null을 넘기지 못하도록 하는것이 합리적이다.