인프런 워밍업 클럽 2기(클린코드/테스트 코드)_day4 미션

인프런 워밍업 클럽 2기(클린코드/테스트 코드)_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 boolean validateOrder(Order order) {
        if (order.getItems().isEmpty()) {
            log.info("주문 항목이 없습니다.");
            return false;
        }

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

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

        return true;
    }
}
  • !(부정 연산자) 줄이기

  • dept 줄이기

  • 공백 라인 추가

     


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

단일 책임 원칙

  • 하나의 클래스는 하나의 책임만 가져야 한다.

     

  • 하나의 역할에 집중하면 코드를 수정할 때 다른 부분에 영향을 주지 않고 유지보수가 쉬워진다.

개방 - 폐쇄 원칙

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

  • 기존의 코드를 변경하지 않고 새로운 기능을 추가할 수 있어야 한다.

     

  • 이미 작동하는 코드가 손상될 위험이 줄어들고 확장도 수월하다.

리스코프 치환 원칙

  • 부모 클래스 대신 자식 클래스를 사용해도 문제가 없어야 한다.

     

  • 자식 클래스가 부모 클래스의 기능을 대신할 수 있다면 코드의 안정성을 높일 수 있다.

인터페이스 분리 법칙

  • 인터페이스는 필요한 기능만을 나누어 제공해야 한다.

  • 큰 인터페이스보다는 작은 인터페이스 여러 개로 설계해야 한다.

  • 불필요한 의존성을 줄이고 코드의 유연성을 높일 수 있다.

의존 역전 법칙

  • 고수준 모듈은 저수준 모듈에 의존하지 않아야 한다.

  • 추상화된 인터페이스에 의존해야 한다.

  • 변화에 강한 구조를 만들고 코드의 재사용성을 높일 수 있다.

 

댓글을 작성해보세요.

채널톡 아이콘