![[인프런 워밍업 클럽 스터디 3기] Day 4 미션](https://cdn.inflearn.com/public/files/blogs/61635ce1-c1ac-4c89-be78-28ccde02e502/인프런워밍업클럽스터디3기.png)
[인프런 워밍업 클럽 스터디 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 미션
주어진 코드와 설명을 보고, [섹션 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;
}
SOLID에 대하여 자기만의 언어로 정리해 봅시다.
SRP (단일 책임 원칙)
식당 안에는 요리사와 종업원이 있다. 요리사는 요리에만 집중하면 되고, 종업원은 음식을 나르는 일에 집중하면 된다. 이렇게 하나의 클래스는 하나의 일에만 집중할 수 있게 설계하는 것을 의미한다.
OCP (개방 - 폐쇄 원칙)
기존에 개발한 로봇이 물건을 나르는 기능만 있고, 새로 창문을 닦는 기능이 추가된다고 할 때, 창문을 닦을 수 있는 기능이 로봇에 추가됨에도 물건을 나르는 기능을 그대로 있어야 한다. 즉, 클래스는 확장이 자유로워야 하지만 동시에 기존의 내용을 변경하면 안된다.
LSP (리스코프 치환 원칙)
자동차라는 클래스가 있고, 이 클래스를 상속 받은 전기차라는 클래스가 있다고 가정한다. 이때, 자동차에 운전한다는 뜻의 drive라는 메서드가 존재한다고 한다면, 전기차는 자동차와는 다른 클래스지만 자동차라는 클래스와 똑같이 '운전'할 수 있는 기능이 있어야 한다.
ISP (인터페이스 분리 원칙)
헬스장에는 트레이너와 회원이 존재한다. 둘 모두 기구를 이용해 운동할 수 있기 때문에 이 기능을 하는 메서드는 별도의 인터페이스에 선언한다. 반면, 회원권을 관리하고 회원을 지도하는 기능을 하는 메서드는 트레이너 클래스에만 존재해야 한다. 따라서 이 두 메서드는 인터페이스에 존재하면 안된다. 이렇게 클라이언트가 자신이 사용하지 않는 인터페이스에 의존하면 안되게 하여 불필요한 메서드 구현을 하지 않게 하는 것을 의미하는 설계 원칙이다.
DIP (의존 역전 원칙)
피자를 자를 때 피자 커터에만 의존하지 않고, 칼 같이 자를 수 있는 기능이 있는 다른 기구도 이용할 수 있어야 한다. 즉, 고수준 모듈에 대한 저수준 모듈의 의존성을 줄이는 것을 의미한다.
댓글을 작성해보세요.