![워밍업 클럽 4기 백엔드 - [Day 4 미션]](https://cdn.inflearn.com/public/files/blogs/2b4b2cf0-2174-4041-b18b-651295aa68e9/인프런워밍업클럽백엔드4.png)
워밍업 클럽 4기 백엔드 - [Day 4 미션]
미션 내용
1. 아래 코드와 설명을 보고, [섹션 3. 논리, 사고의 흐름]에서 이야기하는 내용을 중심으로 읽기 좋은 코드로 리팩토링해 봅시다.
리팩토링 전
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.isEmpty()) {
log.info("주문 항목이 없습니다.");
return false;
}
if (order.isTotalPriceInvalid()) {
log.info("올바르지 않은 총 가격입니다.");
return false;
}
if (order.isCustomerInfoMissing()) {
log.info("사용자 정보가 없습니다.");
return false;
}
return true;
}
2. SOLID에 대하여 자기만의 언어로 정리해 봅시다.
스마트폰에 비유해서 설명하겠습니다.
S – 단일 책임 원칙 (Single Responsibility Principle)
"카메라는 사진만 찍자. 스피커와 마이크기능까지 있으면 그만큼 고장날 위험이 많아지고 고치기 힘들다."
하나의 부품에 여러 기능을 가지면 하나의 기능이 고장날 때, 모든 기능을 사용 못하고 유지보수가 어려워진다.
O – 개방-폐쇄 원칙 (Open/Closed Principle)
"앱을 추가해도 운영체제를 고치지 않아도 돼야 한다."
새로운 기능(앱, 확장 기능)을 추가하더라도 기존 OS나 시스템 코드는 건드리지 않아야 한다.
기존 구조는 닫혀 있고, 확장은 열려 있어야 함.
L – 리스코프 치환 원칙 (Liskov Substitution Principle)
"새 카메라 모듈을 껴도, '사진 찍기 버튼'은 그대로 작동해야 한다."
카메라 모듈을 새 버전으로 바꾸더라도 기존 방식대로 사진이 찍히고 동작이 유지돼야 한다.
대체 부품(서브클래스)은 원래 부품(슈퍼클래스)을 완벽히 대체할 수 있어야 함.
I – 인터페이스 분리 원칙 (Interface Segregation Principle)
"문자만 보내는 앱에 카메라, GPS, 블루투스를 요구하지 말자."
앱이 자기에게 필요 없는 기능(인터페이스)까지 강제로 구현하게 하면 불필요한 권한 요청과 복잡도가 생김.
기능을 작게 나눠서 필요한 기능만 연결할 수 있어야 한다.
D – 의존 역전 원칙 (Dependency Inversion Principle)
"핸드폰 운영체제는 '충전기'에 의존해야지, 삼성 65W 모델 같은 구체적인 충전기에 의존하면 안 된다."
OS나 하드웨어는 '충전 어댑터' 라는 기능(인터페이스)만 알면 된다.
충전기 종류가 바뀌더라도 시스템이 동작되어야 확장성이 생긴다.
강의 - Readable Code: 읽기 좋은 코드를 작성하는 사고법미션 내용 - Readable Code: 읽기 좋은 코드를 작성하는 사고법 中 4. 객체 지향 패러다임
댓글을 작성해보세요.