워밍업 클럽 4기 - 백엔드 Day 4 미션

1. 코드 리펙토링

  • 이전코드

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 boolean validateOrder(Order order) {
        if (isEmptyOrder(order)) {
            log.info("주문 항목이 없습니다");
            return false;
        }

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

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

        return true; 
    }

 

Early return

- 각 조건 실패시 조기 반환을 통해서 깊은 중첩을 제거

 

공백라인을 대하는 자세

- 각 조건별 블록별로 공백줄을 넣어서 논리 단위 분리

 

부정어를 대하는 자세

- !isEmptyOrder 대신에 isEmptyOrder로 대신하여 구현하여 가독성이 더 좋게 변경

 

 

2. SOLID 원칙

1. SRP

- 하나의 클래스는 단 한가지의 변경 이유만을 가져야한다

- 단 하나의 기능만을 담당하게되어 응집도를 높이고 변화에 유연하게 대처할 수 있다

 

2. OCP

- 확장에는 열려있고 수정에는 닫혀있어야 한다

- 기존 코드는 건드리지 않고 기능을 확장할수 있게 해준다

 

3. LSP

- 상속구조에서 부모클래스의 인스턴스를 자식 클래스이 인스턴스로 치환할수 있어야 한다

- 상속 구조에서 자식 클래스가 부모의 행위를 깨뜨리지 않도록 설계

 

4. ISP

- 클라이언트는 자신이 사용하지 않는 인터페이스에 의존하면 안된다

- 인터페이스를 작게 나눠 불필요한 구현을 피하고 불필요한 의존성을 제거한다

 

5. DIP

- 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안된다

- 구체적인 구현이 아닌 추상에 의존하게 하여 결합도를 낮추고 유연성과 테스트 용이성을 향상 시킨다

 

 

 

댓글을 작성해보세요.

채널톡 아이콘