inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

워밍업 클럽 2기 백엔드 클린코드&테스트 코드 1주차 발자국

won1680
0

Readable Code: 읽기 좋은 코드를 작성하는 사고법 섹션 1~5까지의 강의 수강과 미션을 진행하고 남긴 1주차 발자국입니다.

 

강의

 

DAY4 미션

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

     

     

    • 요구사항

       

    사용자가 생성한 '주문'이 유효한지를 검증하는 메서드.

Order는 주문 객체이고, 필요하다면 Order에 추가적인 메서드를 만들어도 된다. (Order 내부의 구현을 구체적으로 할 필요는 없다.)

필요하다면 메서드를 추출할 수 있다.

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;
}
public class OrderService {

	private final LogPrinter logPrinter;

	public OrderService() {
		logPrinter = new LogPrinter(this.getClass());
	}

	public boolean validateOrder(Order order) {
		if (order.hasNoItems()) {
			logPrinter.printInfo("주문 항목이 없습니다.");
			return false;
		}
		if (order.hasInvalidTotalPrice()) {
			logPrinter.printInfo("올바르지 않은 총 가격입니다.");
			return false;
		}
		if (order.hasNoCustomerInfo()) {
			logPrinter.printInfo("사용자 정보가 없습니다.");
			return false;
		}

		return true;
	}
}

public class Order {

	private final List<Item> items;
	private final Customer customer;

	public Order(List<Item> items, Customer customer) {
		this.items = items;
		this.customer = customer;
	}

	public boolean hasNoItems() {
		return items == null || items.isEmpty();
	}

	public boolean hasInvalidTotalPrice() {
		return calculateTotalPrice() <= 0;
	}

	public long calculateTotalPrice() {
		return items.stream()
                        .mapToLong(Item::getPrice)
			.sum();
	}

	public boolean hasNoCustomerInfo() {
		return customer == null || customer.isNotExist();
	}

}

 

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

  1. 미션 회고

 

 

답변 0