inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[워밍업 클럽 3기 BE 클린코드&테스트] - 1주차 발자국

5jeong
0

회고

1주차에 정말 많은 것을 학습하였습니다. 추상부터 객체지향까지 클린코드에 대해 자세하고 이해가기 쉬운 강의였습니다.

클린코드에 대해 관심을 갖고는 있었지만, 어떻게 적용하고, 어디까지 적용해야하는지가 어려웠었는데, 이제는 감이 조금은 오는것 같습니다. 남은 주차와 강의도 열심히 듣고 참여하겠습니다!


강의 내용 요약

1. 추상

우리가 클린 코드를 추구해야 하는 이유

추상과 구체

메서드 이름 짓기

메서드와 추상화

메서드 선언부

추상화 레벨

매직 넘버, 매직 스트링


2. 논리, 사고 흐름

Early Return

사고의 Depth 줄이기

가독성 있는 공백 라인

부정어를 대하는 자세 → 긍정으로 처리

해피 케이스와 예외 처리


3. 객체지향 패러다임

객체 설계하기

객체 생성 시 주의사항

SOLID 원칙


4. 객체지향 적용하기

상속과 조합

Value Object (값 객체)

일급 컬렉션

Enum의 특성과 활용

다형성 활용

숨겨져 있는 도메인 개념 도출하기

미션

Day 2 - 추상과 구체

미션 답변

  1. 추상적 개념: "사용자가 선착순 쿠폰을 발급받는다."

  2. 구체적 과정:

    1. 사용자가 특정 쿠폰 발급 요청을 보냄.

    2. Redis의 Set 자료구조에서 남은 쿠폰 개수를 확인.

    3. 쿠폰 수량이 남아 있다면 Redis에서 하나를 제거하고 발급 처리.

    4. 발급된 쿠폰 정보는 DB에 저장되고, 사용자는 쿠폰을 발급받음.

    5. 트랜잭션을 통해 동시성 제어를 수행하여 중복 발급 방지.

요약


Day 4

1. 읽기 좋은 코드로 리팩토링

public class Day4Mission {
    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;
    }
}

기존 코드 문제점

리팩토링 방식

리팩토링 후 코드

private boolean validateOrder(Order order) {
    if (isOrderEmpty(order)) {
        log.info("주문 항목이 없습니다.");
        return false;
    }
    if (hasNoCustomerInfo(order)) {
        log.info("사용자 정보가 없습니다.");
        return false;
    }
    if (isTotalPriceInvalid(order)) {
        log.info("올바르지 않은 총 가격입니다.");
        return false;
    }
    return true;
}

private boolean hasNoCustomerInfo(Order order) {
    return !order.hasCustomerInfo();
}

private boolean isOrderEmpty(Order order) {
    return order.getItems() == null || order.getItems().isEmpty();
}

private boolean isTotalPriceInvalid(Order order) {
    return order.getTotalPrice() <= 0;
}

1. SOLID에 대하여 자기만의 언어로 정리

SOLID원칙의 정의와 예시, 그리고 스프링에서 적용되는지에 대해 작성해보았습니다.

스프링에서 SOLID 원칙 알아보기

 

백엔드

답변 0