[인프런 워밍업 클럽 2기 클린코드 & 테스트 코드] Day4 과제
해당 글은 [인프런 워밍업 클럽 2기 클린 코드 & 테스트 코드]에 참가하여 박우빈님의 <Readable Code: 읽기 좋은 코드를 작성하는 사고법> 강의를 듣고 작성한 글입니다.
1. 코드 리팩토링
/*
* 주문 검증 메서드
* 1. 주문 항목이 0 이상이어야 한다.
* 2. 총 금액이 0 이상이어야 한다.
* 3. 주문을 하는 사용자 정보가 있어야 한다.
*/
public boolean validateOrder(Order order) {
return hasItems(order) && hasCustomerInfo(order) && isTotalPriceInvalid(order);
}
private static boolean hasItems(Order order) {
if (order.getItems().size() > 0) {
return true;
}
log.info("주문 항목이 없습니다.");
return false;
}
private static boolean isTotalPriceInvalid(Order order) {
if (order.getTotalPrice() > 0) {
return true;
}
log.info("올바르지 않은 총 가격입니다.");
return false;
}
private static boolean hasCustomerInfo(Order order) {
if (order.hasCustomerInfo()) {
return true;
}
log.info("사용자 정보가 없습니다.");
return false;
}
2. SOLID를 자기만의 언어로 정리하기
SRP : Signle Responsibility Principle
단일 책임 원칙
하나의 클래스는 하나의 책임만 가진다.
하나의 일 & 하나의 주제만 가져야 한다!
OCP : Open - Closed Principle
개방 폐쇄 원칙
확장에 열려 있고 수정에 닫혀 있다.
기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있다.
LSP : Liskov Substitution Principle
리스코프 치환 원칙
자식 클래스는 부모 클래스를 대체할 수 있어야 한다.
부모 클래스의 인스턴스를 자식 클래스의 인스턴스로 변경했을 때, 프로그램이 잘 작동해야 한다.
자식이 부모의 기능을 잘 물려 받아야 한다. -> 자식은 부모의 의지를 잘 담고 있어야 한다.
ISP : Interface Segregation Principle
인터페이스 분리 원칙
사용하지 않는 기능을 의존하지 않도록 인터페이스를 여러 개로 분리한다. -> 필요한 기능만 구현하게 한다.
인터페이스를 잘게 쪼개자!
DIP : Dependency Inversion Principle
의존 관계 역전 원칙
고수준 모듈(추상화 레벨 높음)이 저수준 모듈(추상화 레벨 낮음)에 의존하면 안된다. 추상화에 의존해야 한다. -> 둘다 인터페이스에 의존해야 한다.
고수준 모듈이 저수준 모듈에 직접적으로 의존하지 않고 인터페이스만 의존시켜 구현체를 쉽게 갈아끼울 수 있도록 한다.
전부 결합도를 낮추고 응집도를 높인다!
댓글을 작성해보세요.