[인프런 워밍업 클럽 백엔드 스터디 2기] 1주차 발자국
강의 수강
추상과 구체
구체적인 이름 짓기 팁과 메서드의 추상화 방법을 알 수 있어서 좋았습니다.
추상화 레벨이라는 것을 처음 알게 되었고 추상화 정도에 따라 코드를 분리시키는 것을 이해하기 쉽게 알려 주셨습니다.
논리, 사고의 흐름
early return을 배우면서 항상 else가 꼭 필요한가에 대한 의문을 해소할 수 있었습니다.
부정문을 써진 코드를 볼 떄마다 복잡하다고 생각했었는데 이를 메서드로 해결하는 방법을 배울 수 있었습니다.
Optional을 사용하면서 메서드들의 의미를 자세히 알진 못했는데 덕분에 자세히 알 수 있었습니다.
객체 지향 패러다임
평소에 getter를 남발해오던 것이 잘못되었다는 것을 깨달았고 항상 모호하게 생각했던 SOLID 원칙의 개념을 확실하게 잡을 수 있었습니다.
객체 지향 적용하기
VO와 Entity의 차이를 알 수 있었고, 기존에 사용해보지 않았던 Enum의 사용법을 배울 수 있었습니다.
학습 회고
칭찬하고 싶은 점
꾸준히 강의를 들으며 정리를 했다는 점
아쉬웠던 점
체력이 따라가지 못해서 다음 날의 강의까지 보지 못 했다.
정리를 조금 더 구체적으로 하지 못 했다.
보완해야할 점
코드를 따라 치면서 어느 순간 이해를 못 하는 부분이 존재했다.
정리한 부분을 보면서 다시 코드를 복기하면서 이해해야할 것 같다.
미션
변경 전
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.hasNoItems()) {
log.info("주문 항목이 없습니다.");
return false;
}
if (order.wrongTotalPrice()) {
log.info("올바르지 않은 총 가격입니다.");
return false;
}
if (order.hasNotCustomerInfo()) {
log.info("사용자 정보가 없습니다.");
return false;
}
return true;
}
해당 코드가 주문이 유효한지 판단하는 코드라고 생각하였다.
우선 의미 단위로 코드를 파악하였고 그 과정은 다음과 같다.
1. 주문항목이 존재하는지 판단하는 부분이다.
getter를 사용하는 부분을 hasNoItems() 메서드로 변경하고 항목이 존재하지 않는다면 false를 리턴하도록 리팩토링한다.
그 뒤 else 부분은 필요 없으므로 else는 제거한다.
2. 총 가격이 유효한지 판단하는 부분이다.
사용자 정보 유효성을 판단하는 if문까지 같이 있기 때문에 우선 이 부분을 분리하고
getter를 사용하는 부분을 wrongTotalPrice() 메서드로 변경한다.
그 뒤의 else if와 else 또한 필요 없으므로 제거한다.
3. 사용자 정보가 유효한지 판단하는 부분이다.
두 번째에서 분리한 if문을 !가 사용되고 있는데 이것을 부정의 의미를 가진 hasNotCoustomerInfo() 메서드로 변경한다.
마지막으로 이 3개의 if문들을 의미 단위로 공백을 준 뒤, 마지막에 if문에 걸리는 것이 없는 경우 true를 리턴 할 수 있도록 return true를 한다.
회고
이번 미션을 진행하면서 강의에서 배웠던 것을 그대로 적용해보면서 내것으로 만들 수 있었던거 같다.
리팩토링을 전에는 해보지 않았지만 걸음마를 뗐다고 할 수 있을 것 같다.
댓글을 작성해보세요.