[인프런 워밍업 클럽 백엔드 스터디 2기] 1주차 발자국

[인프런 워밍업 클럽 백엔드 스터디 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를 한다.

회고

이번 미션을 진행하면서 강의에서 배웠던 것을 그대로 적용해보면서 내것으로 만들 수 있었던거 같다.

리팩토링을 전에는 해보지 않았지만 걸음마를 뗐다고 할 수 있을 것 같다.

댓글을 작성해보세요.

채널톡 아이콘