inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[워밍업 클럽 4기 - BE 클린 코드 & 테스트 코드] Day 4 미션

레이
0

🎯 Day 4 미션

 

1⃣번 미션


Step 0) 분석 및 이해하기 & 리팩토링 대상/범위 확인

// 사용자가 생성한 '주문'이 유효한지를 검증하는 메서드
public boolean validateOrder(Order order) {
    // a. 주문 항목이 있는지 확인
    if (order.getItems().size() == 0) {     // a-1. 주문 항목이 없음
        log.info("주문 항목이 없습니다.");
        return false;
    } else {                                // a-2. 주문 항목이 있음
        // b. 주문 총액이 올바른지 확인 (0원 초과)
        if (order.getTotalPrice() > 0) {            // b-1. 주문 총액이 0원 초과
            // c. 주문한 사용자 정보가 있는지 확인
            if (!order.hasCustomerInfo()) {             // c-1. 사용자 정보가 없음
                log.info("사용자 정보가 없습니다.");
                return false;
            } else {                                    // c-2. 사용자 정보가 있음
                return true;
            }
        } else if (!(order.getTotalPrice() > 0)) {  // b-2. 주문 총액이 0원 이하
            log.info("올바르지 않은 총 가격입니다.");
            return false;
        }
    }

    // 모든 조건을 통과하여 유효한 주문인 경우
    return true;
}

Step 1) 리팩토링

 

1. 주문 항목이 있는지 확인 (a)

if (order.getItems().size() == 0)

⇒ 뇌 메모리 적게 쓰기 (인지적 경제성)

public boolean validateOrder(Order order) {
    if (order.getItems().size() == 0) {
        log.info("주문 항목이 없습니다.");
        return false;
    }

    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;
}

 

2. 주문 총액이 올바른지 확인 (b)

public boolean validateOrder(Order order) {
    if (order.getItems().size() == 0) {
        log.info("주문 항목이 없습니다.");
        return false;
    }

    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;
}

 

public boolean validateOrder(Order order) {
    if (order.getItems().size() == 0) {
        log.info("주문 항목이 없습니다.");
        return false;
    }

    if (order.getTotalPrice() <= 0) {
        log.info("올바르지 않은 총 가격입니다.");
        return false;
    }

    if (!order.hasCustomerInfo()) {
        log.info("사용자 정보가 없습니다.");
        return false;
    } else {
        return true;
    }
    return true;
}

 

3. 주문한 사용자 정보가 있는지 확인 (c)

public boolean validateOrder(Order order) {
    if (order.getItems().size() == 0) {
        log.info("주문 항목이 없습니다.");
        return false;
    }

    if (order.getTotalPrice() <= 0) {
        log.info("올바르지 않은 총 가격입니다.");
        return false;
    }

    if (!order.hasCustomerInfo()) {
        log.info("사용자 정보가 없습니다.");
        return false;
    }
    
    return true;
}

 

 

 

2⃣번 미션


SRP (Single Responsibility Principle; 단일 책임의 원칙)

OCP (Open-Closed Principle; 개방-폐쇄의 원칙)

LSP (Liskov substitution Priciple; 리스코프 치환 원칙)

ISP (Interface Segregation Principle; 인터페이스 분리 원칙)

DIP (Dependecy Inversion Principle; 의존성 역전의 법칙)

 

 

👨🏻‍💻 강의 출처

백엔드 워밍업클럽 백엔드 clean-code

답변 0