[인프런워밍업클럽2기] DAY 4 미션
코드 리팩토링
요구사항
사용자가 생성한 '주문'이 유효한지 확인해야한다.
주문 항목은 1개 이상이어야한다.
주문 전체 가격은 1원 이상이어야 한다.
주문한 사용자 정보는 필수 정보이다.
Order는 주문 객체이고, 필요하다면 Order에 추가 메서드를 만들 수 있다.
필요하다면 메서드를 추출할 수 있다.
public boolean validate(Order order) {
if (order.isEmpty()) {
log.info("주문 항목이 없습니다.");
return false;
}
if (order.isInvalidPrice()) {
log.info("올바르지 않은 총 가격입니다.");
return false;
}
if (order.isInvalidUser()) {
log.info("사용자 정보가 없습니다.");
return false;
}
return true;
}
SOLID
Single Responsibility Principle (단일 책임 원칙)
하나의 모듈은 하나에 대한 책임만을 가져야한다.
클래스 내부 private 메서드가 많거나 단위테스트가 애매한 경우에는 책임을 분리하는 것을 고려할 수 있다.
Open-Close Principle (개방-폐쇄 원칙)
확장에 열려있고 수정엔 닫혀있어야한다.
새로운 기능을 추가할 때 기존 기능에 영향 없이 추가할 수 있어야한다. 즉 서로간의 의존 관계를 최소화해야한다.
이 원칙은 B기능을 추가하였는데 A기능 테스트가 깨짐으로써도 확인할 수 있다.
Liskov Substitution Principle (리스코프 치환 원칙)
부모 클래스의 역할을 자식이 대체할 수 있어야한다.
List 인터페이스의 구현체를 LinkedList에서 ArrayList로 변경하더라도 결과가 동일해야한다.
Interface Segregation Principle (인터페이스 분리 원칙)
하나의 인터페이스가 많은 책임을 가지고 있다면 인터페이스를 분리해야한다.
Dependency Inversion Principle (의존관계 역전 원칙)
구현체를 직접 사용하는 것 보다 추상화 된 것을 바라보는 것이 확장에 용이하다.
List를 사용하는 것이 ArrayList를 사용하는 것 보다 확장에 유리하다.
댓글을 작성해보세요.