깡뇽

[Clean Code] 클린 코드 - 7장 오류 처리 본문

Book/Clean Code

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

깡뇽 2022. 3. 3. 16:20
반응형

오류 처리 코드로 인해 실제 코드 맥락 등을 이해하기 어려울 수 있으니 깨끗한 코드와 오류 처리는 연관성이 있다고 할 수 있다.

 

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

호출자를 사용해 오류를 반환하기 보다는 오류가 발생하면 예외를 던지도록 코딩하면 깨끗한 코드를 작성할 수 있다.

 

Try-Catch-Finally 문부터 작성하라

try 블록에서 오류가 생기면 catch 블록으로 넘어가기 때문에 프로그램 상태를 일관성 있게 유지해 준다. try-catch 구조로 범위를 정의했으니 TDD를 사용해서 필요한 나머지 논리들도 추가하여 코드를 작성할 수 있다.

즉, 저자는 강제로 예외가 발생되는 테스트 케이스를 먼저 작성하고 나서 테스트를 통과하게 코드를 작성하는 방법을 권장한다.

* TDD(Test Driven Development) : 테스트 주도 개발. 반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현한다.

 

미확인(unchecked) 예외를 사용하라

확인된 예외는 유용할 때도 있지만 확인된 오류를 던지기 위해 함수는 언언부에 throws 절을 추가하고, 변경한 함수를 호출하는 모든 함수는 1. catch 블록에서 새로운 예외 처리 2. 선언부에 throw 절을 추가 해야 한다. 그러므로 코드의 최하단에서 상단까지 연쇄적인 수정이 일어나야하고, 캡슐화가 깨지게 된다. 이는 본래 오류를 원거리에서 처리하기 위해 예외를 사용한다는 본질에서 벗어난다는 것을 유념해야 한다.

 

예외에 의미를 제공하라

실패한 연산 이름, 실패 유형 등에 대한 정보를 오류 메시지에 담아서 예외를 던져서 추후에 오류 발생 원인과 위치를 찾기 쉽도록 코드를 작성해야 한다.

 

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

ㅌ외부 API를 감싸는 클래스를 만들어 외부 라이브러리와 프로그램 사이의 의존성을 줄이고, 추후 라이브러리를 변경할 때의 비용을 줄일 수 있다. 그러므로 한 예외는 잡아내고 나머지는 무시해도 괜찮은 경우 여러 예외 클래스를 사용하여 코드를 작성할 수 있다.

 

정상 흐름을 정의하라

특수 사례 패턴(Special Case Pattern)이라고 불리는 방식을 통해 클래스를 만들거나 객체를 조작해 특수 사례를 처리할 수 있고, 이를 통해 클래스나 객체가 예외적인 상홍을 캡슐화하여 처리하기 때문에 클라이언트 코드가 예외적인 상활을 처리할 필요가 없어진다. 

 

null을 반환하지 마라

null을 반환하는 코드들이 너무 많아서 실수로 놓친다면 NullPointerException이 발생할 수 있다. null을 반환하기 보다는 예외를 던지거나 특수 사례 객체를 반환하는 것이 좋다.

 

null을 전달하지 마라

메서드에서 null을 반환하는 방식과 함께 null을 전달하는 방식도 좋지 않은데 정상적인 인수로 null을 기대하는 API가 아니라면 해당 방식은 피하는 것이 좋다. 대부분의 프로그래밍 언어는 호출자가 null을 실수로 넘겼을 때 적절히 처리하는 방법이 없으므로 애초에 null을 전달하지 못하도록 해야 한다.

 

결론

오류 처리를 프로그램 논리와 분리하여 코드의 안정성을 높이고 유지보수성도 향상시킬 수 있다.

 


 

읽으면 읽을수록 아직은 내가 이 책을 읽을 수준의 프로그래머가 아니라는 생각이 든다. 내가 처리해 본 오류라고는 알고리즘 문제들을 풀 때에 발생하는 문법 오류, 인덱스 오류 등이 대부분이기에... 하지만 읽어두면 앞으로의 코드를 작성할 때에 도움이 되겠지!?

코틀린으로 앱 개발을 할 때에 null 처리에 대해서 굉장히 꼼꼼한 처리를 필요로 하는데 앱의 안정성을 위한 매우 중요한 절차임을 다시금 깨닫는다.

책을 통해 깨끗하게 코드를 작성하는 법을 배우는 만큼 시간을 내어 코드를 열심히 짜야할 것 같다!! 코딩 하자!!

 

TIL 11회차

반응형