🎁[속보] 인프런 내 깜짝 선물 출현 중🎁

[인프런 워밍업 클럽 스터디 3기] Day 4 미션

[인프런 워밍업 클럽 스터디 3기] Day 4 미션

이 포스트는 [인프런 워밍업 클럽 스터디 3기](https://www.inflearn.com/course/offline/warmup-club-3-be-code)에 참여한 후, [Readable Code: 읽기 좋은 코드를 작성하는 사고법](https://www.inflearn.com/course/readable-code-%EC%9D%BD%EA%B8%B0%EC%A2%8B%EC%9D%80%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1%EC%82%AC%EA%B3%A0%EB%B2%95)를 수강한 후 작성된 포스트입니다.

 

Day 4 미션

 

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

public static final String NO_ORDER_ITEM_EXISTS = "주문 항목이 존재하지 않습니다.";
public static final String INVALID_TOTAL_PRICE = "주문한 가격의 총합이 올바르지 않습니다.";
public static final String NO_USER_INFO_EXISTS = "사용자 정보가 존재하지 않습니다.";

public static boolean isValidTotalPrice(int price) {
    return price > 0;
}

public boolean validateOrder(Order order) {
    if (order.getItems().isEmpty()) { // size() == 0 -> 의미가 같은 isEmpty()로 교체
        log.info(NO_ORDER_ITEM_EXISTS);
        return false;
    }

    if (isValidTotalPrice(order.getTotalPrice()) == false) {
        log.info(INVALID_TOTAL_PRICE);
        return false;
    }

    if (order.hasNoCustomerInfo()) {
        log.info(NO_USER_INFO_EXISTS);
        return false;
    }

    return true;
}

 

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

  • SRP (단일 책임 원칙)

    • 식당 안에는 요리사와 종업원이 있다. 요리사는 요리에만 집중하면 되고, 종업원은 음식을 나르는 일에 집중하면 된다. 이렇게 하나의 클래스는 하나의 일에만 집중할 수 있게 설계하는 것을 의미한다.

  • OCP (개방 - 폐쇄 원칙)

    • 기존에 개발한 로봇이 물건을 나르는 기능만 있고, 새로 창문을 닦는 기능이 추가된다고 할 때, 창문을 닦을 수 있는 기능이 로봇에 추가됨에도 물건을 나르는 기능을 그대로 있어야 한다. 즉, 클래스는 확장이 자유로워야 하지만 동시에 기존의 내용을 변경하면 안된다.

  • LSP (리스코프 치환 원칙)

    • 자동차라는 클래스가 있고, 이 클래스를 상속 받은 전기차라는 클래스가 있다고 가정한다. 이때, 자동차에 운전한다는 뜻의 drive라는 메서드가 존재한다고 한다면, 전기차는 자동차와는 다른 클래스지만 자동차라는 클래스와 똑같이 '운전'할 수 있는 기능이 있어야 한다.

  • ISP (인터페이스 분리 원칙)

    • 헬스장에는 트레이너와 회원이 존재한다. 둘 모두 기구를 이용해 운동할 수 있기 때문에 이 기능을 하는 메서드는 별도의 인터페이스에 선언한다. 반면, 회원권을 관리하고 회원을 지도하는 기능을 하는 메서드는 트레이너 클래스에만 존재해야 한다. 따라서 이 두 메서드는 인터페이스에 존재하면 안된다. 이렇게 클라이언트가 자신이 사용하지 않는 인터페이스에 의존하면 안되게 하여 불필요한 메서드 구현을 하지 않게 하는 것을 의미하는 설계 원칙이다.

  • DIP (의존 역전 원칙)

    • 피자를 자를 때 피자 커터에만 의존하지 않고, 칼 같이 자를 수 있는 기능이 있는 다른 기구도 이용할 수 있어야 한다. 즉, 고수준 모듈에 대한 저수준 모듈의 의존성을 줄이는 것을 의미한다.

댓글을 작성해보세요.


채널톡 아이콘