inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

김경환
1

회고

저는 그동안 제가 이상적인 코드를 작성하고 있다고 생각했습니다. 나름 많은 고민을 코드에 녹여냈고 가독성을 항상 신경썼습니다. 하지만 이번 강의를 통해서 제가 많은 부분들을 몰랐다는 점에서 놀랐습니다. 섹션 3을 통해 전반적인 안 좋은 습관들을 교정해나갈 기회는 저에게 값집니다. 남은 시간들도 기대가 됩니다.

 

강의 내용 요약

인트로

추상화 레벨

 

매직 넘버, 매직 스트링

뇌 메모리 적게 쓰기

멀티 태스킹은 곧 저글링을 하는 것과 다름이 없다 (책 '도둑맞은 집중력' 발췌)

사고의 depth 줄이기

 

공백 라인을 대하는 자세

 

부정어를 대하는 자세

 

해피 케이스와 예외 처리

 

추상의 관점으로 바라보는 객체 지향

 

객체 설계하기

 

SOLID

SRP

LSP

ISP

 

상속과 조합

 

Value Object

 

일급 컬렉션

 

Enum의 특성과 활용

 

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

 

Day 4

미션 1 설명

1. 아래 코드와 설명을 보고, [섹션 3. 논리, 사고의 흐름]에서 이야기하는 내용을 중심으로 읽기 좋은 코드로 리팩토링해 봅시다.

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 static final String NO_ORDER_ITEM = "주문 항목이 없습니다.";
public static final String INVALID_TOTAL_PRICE = "올바르지 않은 총 가격입니다.";
public static final String NO_USER_INFO = "사용자 정보가 없습니다.";

public boolean validateOrder(Order order) throws OrderException {

    if (order.doesHaveItem()) {
        throw new OrderException(NO_ORDER_ITEM);
    }

    if (order.doesNotHaveValidTotalPrice()) {
        throw new OrderException(INVALID_TOTAL_PRICE);
    }

    if (order.doesNotHaveCustomerInfo()) {
        throw new OrderException(NO_USER_INFO);
    }

    return true;
}

Order

public abstract class Order {

    public abstract boolean doesHaveItem();

    public abstract boolean doesNotHaveValidTotalPrice();

    public abstract boolean doesNotHaveCustomerInfo();
}

변경 사항

  1. if문의 조건들을 하나의 함수로 정의함으로써 조건의 의미를 명확히 했습니다.

  2. if문의 조건에 부합하지 않을 경우 바로 결과를 반환하게 했습니다.

  3. 불필요한 부정 조건을 제거했습니다.

  4. 별개의 예외 처리 클래스를 생성하여 예외를 명확히 했습니다.

  5. 관심사를 기준으로 공백을 두었습니다.

미션 2 설명

SOLID에 대하여 자기만의 언어로 정리해 봅시다.

 

S

O

L

I

D

답변 0