인프런 워밍업 클럽 스터디 2기 백엔드 클린 코드, 테스트 코드 - Day4 미션

인프런 워밍업 클럽 스터디 2기 백엔드 클린 코드, 테스트 코드 - Day4 미션

  1.  아래 코드와 설명을 보고, [섹션 3. 논리, 사고의 흐름]에서 이야기하는 내용을 중심으로 읽기 좋은 코드로 리팩토링


    [before]

public boolean validateOrder(Order order) {
    if (order.getItems().size() == 0) {
        log.info("주문 항목이 없습니다.");
        return false;
    } else {
        if (order.getTotalPrice() > 0) {
            if (!order.hasCustomerInfo()) {
                log.info("사용자 정보가 없습니다.");
                return false;
            } else {
                return true;
            }
        } else if (!(order.getTotalPrice() > 0)) {
            log.info("올바르지 않은 총 가격입니다.");
            return false;
        }
    }
    return true;
}

 

[after]

public boolean validateOrder(Order order) {
    if (order.isItemCountEqualTo(0)) {
        log.info("주문 항목이 없습니다.");
        return false;
    }
    if (order.isTotalPriceLessThanOrEqualTo(0)) {
        log.info("올바르지 않은 총 가격입니다.");
        return false;
    }

    if (order.hasCustomerInfo()) {
        return true;
    }
    return false;
}

 

  1. SOLID에 대하여 자기만의 언어로 정리해 봅시다.

  • SRP

    • 하나의 클래스는 변경의 이유가 하나여야 한다.

    • 변경의 파급력이 작아야 한다.

  • OCP

    • 수정에는 닫혀 있고, 확장에는 열려 있다.

    • 새로운 기능을 추가할 때, 기존 코드의 수정이 최소화되어야 한다.

       

  • LSP

    • 부모 인스턴스가 사용되는 위치에 자식 인스턴스가 와도 의도대로 동작해야 한다.

    • 자식 클래스는 선행 조건이 더 까다로우면 안 된다.

      • 기존 부모 인스턴스에서는 사전 과정에서 유효했던 것들이 자식 인스턴스에서는 유효하지 않게 될 수 있어, 자식 인스턴스가 왔을 때 의도와 다르게 동작할 수 있다.

    • 자식 클래스는 후행 조건이 느슨해선 안 된다.

      • 기존 부모 인스턴스에서는 사후 과정에서 통과되었던 범위보다 자식 인스턴스에서 더 큰 범위가 통과되면 클라이언트 입장에서 대응이 어렵다.

  • ISP

    • 클래스 자신이 이용하지 않는 메서드에 의존하지 않아야 한다.

    • 인터페이스를 잘게 쪼개는 것이 좋다

  • DIP

    • 상위 모듈과 하위 모듈은 추상화(인터페이스)에 의존해야 한다.

      • 상위 모듈은 하나의 기능이라고 보면, 하위 모듈은

         

    •  

 

 

 

댓글을 작성해보세요.

채널톡 아이콘