inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

하양이
0

Day 2. 추상과 구체

추상과 구체

추상 (抽象)

추상화의 가장 대표적인 행위

이름 짓기

메서드와 추상화

잘 쓰여진 코드라면, 한 메서드의 주제는 반드시 하나다.

메서드 선언부

반환타입 메서드명 (파라미터) {}

추상화 레벨

하나의 세계 안에서는, 추상화 레벨이 동등해야 한다.

매직 넘버, 매직 스트링

의미를 갖고 있으나, 상수로 추출되지 않은 숫자, 문자열 등

미션 - 생각나는 추상과 구체의 예시

Winter is coming

Day 3. 논리, 사고의 흐름 | 객체 지향 패러다임

뇌 메모리 적게 쓰기

“정리 시스템에서 중요한 과제는 최소의 인지적 노력으로 최대의 정보를 제공하는 것이다.”

- 대니얼 J. 레비틴, 「정리하는 뇌」, 와이즈베리, 2015, 134p

뇌는 한 번에 한 가지 일 밖에 하지 못한다. 멀티태스킹? 그건 저글링일 뿐.

- 요한 하리, 「도둑맞은 집중력」, 어크로스, 2023, 60p

Early return

Early return으로 else의 사용을 지양

사고의 depth 줄이기

공백 라인을 대하는 자세

공백 라인도 의미를 가진다.

부정어를 대하는 자세

부정 연산자(!)의 가독성은 낮다.

해피 케이스와 예외 처리

사람은, 해피 케이스에 몰두하는 경향이 있다.

Null을 대하는 자세

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

객체 설계하기

새로운 객체를 만들 때 주의할 점

도메인 지식은 만드는 것이 아니라 발견하는 것

미션 - 읽기 좋은 코드로 리팩토링

public boolean validateOrder(Order order) {
    if (order.hasNotItem()) {
        log.info("주문 항목이 없습니다.");
        return false;
    }

    if (order.hasNotTotalPrice()) {
        log.info("올바르지 않은 총 가격입니다.");
        return false;
    }

    if (order.hasNotCustomerInfo()) {
        log.info("사용자 정보가 없습니다.");
        return false;
    }

    return true;
}

class Order {

    private List<String> items = new ArrayList<>();
    private Long totalPrice;
    private String customerInfo;

    public boolean hasCustomerInfo() {
        return customerInfo != null && !customerInfo.isEmpty();
    }

    public boolean hasNotCustomerInfo() {
        return !hasCustomerInfo();
    }

    public boolean hasNotItem() {
        return !items.isEmpty();
    }

    public boolean hasTotalPrice() {
        return totalPrice != null && totalPrice > 0;
    }

    public boolean hasNotTotalPrice() {
        return !hasTotalPrice();
    }

}

Day 4. SOLID

미션 - 자기만의 언어로 정리한 SOLID

Day 5. 객체 지향 적용하기

상속과 조합

Value Object

일급 컬렉션

Enum의 특성과 활용

다형성 활용하기

변하는 것과 변하지 않는 것을 분리하여 추상화하고, OCP를 지키는 구조

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

완벽한 설계는 없다. 그 당시의 최선이 있을 뿐.

출처

백엔드 워밍업클럽 클린코드

답변 0