워밍업 클럽 3기 BE 클린코드&테스트(1주차)
15일 전
섹션2. 추상
불필요한 정보를 제거하고 핵심만 남기는 것을 추상화라고 한다(이름짓기 등)
이 개념을 코드에 적용하면 복잡한 코드를 단순화 할 수 있으며
코드 유지보수가 용이해지고 가독성이 높아져
협업 시 팀원에게 필요한 수준의 정보를 전달할 수 있어 효율적이게 된다
섹션3. 논리, 사고의 흐름
중첩된 조건문을 줄이고 가독성을 향상시키기 위해 Early Return을 사용한다
! 부정어 대신 긍정적이고 직관적인 표현으로 메서드 이름을 지은 코드가 읽기 편하다
섹션4. 객체 지향 패러다임
객체는 데이터와 기능을 함께 가지며 객체 간 협력을 통해 작동한다
관심사의 분리를 통해 높은 응집도, 낮은 결합도를 유지해야한다
<solid 원칙> 을 활용하면 확장에 용이하고 유지보수하기 쉬운 코드를 만들 수 있다
단일 책임 원칙 (SRP): 한 클래스는 단 하나의 책임만 가져야 한다
개방-폐쇄 원칙 (OCP): 확장에는 열려 있고, 변경에는 닫혀 있어야 한다
리스코프 치환 원칙 (LSP): 자식 클래스는 부모 클래스를 대체할 수 있어야 한다
인터페이스 분리 원칙 (ISP): 클라이언트가 사용하지 않는 기능에 의존하지 않도록 인터페이스를 작게 나누어야 한다
의존성 역전 원칙 (DIP): 구체적인 구현이 아니라, 추상화에 의존해야 한다
DAY 2
"연극을 본다" 구체 :
보고 싶은 연극을 선택하고 예매한다
극장으로 이동하여 자리에 앉는다
조명이 어두워지고 배우들이 등장하면 연극이 시작된다
배우들의 연기와 스토리를 감상한다
연극이 끝난 후 극장을 나온다
DAY 4
기존 코드
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 (isOrderEmpty(order)) {
return false;
}
if (!isTotalPriceValid(order)) {
return false;
}
if (!order.hasCustomerInfo()) {
log.info("사용자 정보가 없습니다.");
return false;
}
return true;
}
private boolean isOrderEmpty(Order order) {
if (order.getItems().isEmpty()) {
log.info("주문 항목이 없습니다.");
return true;
}
return false;
}
private boolean isTotalPriceValid(Order order) {
if (order.getTotalPrice() <= 0) {
log.info("올바르지 않은 총 가격입니다.");
return false;
}
return true;
}
단일 책임 원칙을 적용해 각 검증 로직을 독립적인 메서드로 분리하여 각 메서드가 하나의 책임만 가지도록함