클린코드 챌린지 #7

dev_suyeon·2022년 3월 4일
0

CleanCode

목록 보기
8/11

오늘 읽은 범위

7장. 오류 처리

책에서 기억하고 싶은 내용

  • 오류 코드보다 예외를 사용하라
    오류가 발생하면 예외를 던지자
    => 논리가 있는 호출자 코드가 오류처리 코드와 뒤섞이는 복잡한 상황을 만들지 않기 위함

  • Try-Catch-Finally 문부터 작성하라
    - 예외가 발생할 코드를 짤 때는 try-catch-finally문으로 시작하자
    => catch블록은 프로그램 상태를 일관성 있게 유지시키는 역할함
    - 단위 테스트 시 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하게 코드를 작성하자
    => try블록의 트랜잭션 범위부터 구현하게 되므로 범위 내에서 트랜잭션 본질을 유지하기 쉬워짐

  • 미확인 예외를 사용하라
    - 모든 예외를 다 확인하여 예외 처리하는 것에는 비용이 든다.
    - 하위 단계에서 코드를 변경하면 상위 단계 메서드 선언부를 모두 고쳐야한다.
    (확인된 예외를 던졌을 때 catch블록이 세단계 위에 있다면 그 사이 메서드가 해당 예외를 정의해야한다.)
    - 캡슐화가 깨질 우려도 있기 때문에 확인된 예외를 사용할때 주의하자.

  • 예외에 의미를 제공하라
    -예외를 던질 때 전후 상황으르 충분히 덧붙인다.
    => 오류 메시지에 정보를 담아(실패한 연산 이름과 실패 유형 언급) 예외와 함께 던진다.
    - 로깅 기능을 사용한다면 오류를 기록하도록 충분한 정보를 넘겨줘야한다.

  • 호출자를 고려해 예외 클래스를 정의하라
    - 오류를 잡아내는 방법으로 사용할 수 있도록 오류를 분류하자.
    - 외부 api를 사용할 때는 감싸기 기법을 이용하자.
    => 외부 라이브러리와 프로그램 사이에서 의존성이 크게 줄어든다.
    - 예외 클래스는 하나만 있어도 충분하다.
    - 한 예외만 잡아내고 다른 예외는 무시해도 된다면 여러 예외 클래스를 사용해도 된다.

  • 정상 흐름을 정의하라
    - 비지니스 논리와 오류처리가 분리된 코드가 간결한 알고리즘으로 보인다.
    - 외부 api를 감싸 독자적인 예외를 던지고, 코드 위에 처리기를 정의해 중단된 계산을 처리하는 코드가 적합하지 않은 상황도 있으니 상황을 판단하여 예외적인 상황을 캡슐화해서 처리한다던지 잘 판단해서 예외를 사용해야한다.
    ex) 특수 사례 패턴 : 클래스를 만들거나 객체를 조작해 특수 사례를 처리하는 방식

    // before
    try {
    	MealExpenses expenses = expenseReportDAO.getMeals(employee.getID());
        m_total += expenses.getTotal();
    } catch(MealExpensesNotFound e){
    	m_total += getMealPerDiem();
    }
    
    // after
    public class PerDiemMealExpenses implements MealExpenses{
       public int getTotal(){
       	// 기본값으로 일일 기본 식비를 반환한다.
       }
    }
  • null을 반환하지 마라
    - null을 반환하는 코드는 일거리만 늘리고 하나라도 빼먹으면 애플리케이션이 통제 불능에 빠질지도 모르니 안좋다.
    - 메서드에서 null을 반호나하고싶다면 예외를 던지거나 특수 사례 객체를 반환하자
    => 사용하려는 외부 api가 null을 반환한다면 감싸기 메서드를 구현해 예외를 던지거나 특수 사레 객체를 반환하는 방식

  • null을 전달하지 마라
    - null을 넘기지 못하도록 금지하는 정책을 만들자!

오늘 읽은 소감

매 챕터마다 현재 진행하고 있는 프로젝트 api 구현할때 도움이 되고 있다.
이번 챕터도 아주 중요한 부분을 정리해주어 좋았다.
특히 null을 반환하고 전달하는 부분에서 저자가 최대한 사용하지 않는게 좋다고 하는 부분에서 깊은 공감과 감명을 받았다. java에선 null이 중요하지만 javascript에서는 null뿐만 아니라 undefined가 있어 처리를 이중으로 해야한다. 아주 골치 아프다. 대부분 완벽하게 처리하지 못하고 테스트를 거치면서 아! 처리하는 걸 깜박했다 하고 다시 코드 수정하고는 했다.
최대한 반환하지 않는것이 좋으니 joi를 사용한다던지 유효성 검증을 도와주는 모듈을 사용하여 처리를 대신해야겠다고 생각했다.

profile
Back-End Developer

0개의 댓글