[워밍업 클럽 3기 BE code] 1주차
워밍업 클럽 3기 BE를 시작한 이유
최근 '내가 코드를 잘 작성하고 있는가'란 의문이 들었습니다. 최범균 개발자님의 도메인주도설계시작하기 책을 기반으로 정리하면서 어느 정도는 정리할 수 있었습니다.
추가적인 자료나 실질적인 예제가 있을까 찾다가 readable code와 practical test 강의에 흥미가 생겼고, 우연찮게 워밍업 클럽이 있어서 신청하였습니다.
미션2. 추상과 구체
추상: 드립 커피를 만든다.
구체:
- 물을 끓인다.
- 원두를 간다.
- 컵 위에 드리퍼를 올리고, 드리퍼 위에 필터를 둔다.
- 필터 위에 원두 가루를 담고 평탄화 한다.
- 다 끓은 물을 드립 포트에 담고, 원두 가루가 파이지 않도록 조심스럽게 드립 포트의 물을 드리퍼에 가득 채운다.
- 물이 다 빠지면 다시 물을 채운다. 총 세 번 물을 채운다.
미션3-1 리팩토링
@Slf4j
public class Order {
private List<Item> items;
private Customer customer;
public boolean validateOrder() {
if (isEmptyItem()) {
log.info("주문 항목이 없습니다.");
return false;
}
if (isInvalidTotalPrice()) {
log.info("올바르지 않은 총 가격입니다.");
return false;
}
if (isCustomerInfoMissing()) {
log.info("사용자 정보가 없습니다.");
return false;
}
return true;
}
private boolean isCustomerInfoMissing() {
return customer == null;
}
private boolean isInvalidTotalPrice() {
return getTotalPrice() > 0;
}
private boolean isEmptyItem() {
return items == null || items.isEmpty();
}
private int getTotalPrice() {
return items.stream()
.map(Item::getPrice)
.reduce(0, Integer::sum);
}
}
class Item {
private int price;
public int getPrice() {
return price;
}
}
class Customer {}
미션 3-2 SOLID
SRP(Single Responsibility Principle, 단일 책임 원칙): 하나의 클래스는 하나의 책임만을 가져야 한다. 해당 책임 이외의 이유로 인하여 변경되어서는 안된다.
OCP(Open Closed Priciple, 개방 폐쇄 원칙): 확장은 열려있고, 수정에는 닫혀있다. 기능 변경과 확장에 대해서는 유연하도록 구현해야 한다.
LSP(Listov Substitution Priciple, 리스코프 치환 원칙): 자식 타입은 부모 타입으로 교체 가능하다. 자식은 상속한 부모의 기능이 의도하는 방향대로 동작해야 한다.
ISP(Interface Segregation Principle, 인터페이스 분리 원칙): 클라이언트가 자신이 이용하지 않는 인터페이스에 의존하지 않도록 적정한 수준의 메서드를 가진다.
DIP(Dependency Inversion Principle, 의존 역전 원칙): 인터페이스에 의존하며 유연하게 변경할 수 있다.
이번 주 소감
생각보다 바쁘고 강의 양도 많아 여유 있게 진행하지는 못하고 있다.
그래도 한 달 간 열심히 해서 잘 마무리해야지^^
댓글을 작성해보세요.