빌더 패턴 주의점

빌더 패턴을 엔티티 외부에서 사용하는 것이 위험하다고 주장. 명확하게 생성할 것

→ 값이 명확하게 들어갔는지 파악이 불가할 수 있기 때문임

public static Member create(MemberCreateRequest createRequest,PasswrodEncoder passwordEncoder) {
        Member member = new Member();

        member.email = requireNonNull(createRequest.email());
        member.nickname = requireNonNull(createRequest.nickname());
        member.passwordHash = requireNonNull(passwordEncoder.encode(createRequest.password()));

        member.status = MemberStatus.PENDING;

        return member;
    }

Record

1. Record란 무엇인가

record는 불변(immutable) 데이터 클래스를 간단하게 정의하기 위한 특별한 클래스야.

기존의 Java 클래스에서

getter, equals(), hashCode(), toString() 같은 반복되는 코드를 자동으로 생성해주는 간결한 문법(syntax sugar) 이라고 보면 돼.

즉,

데이터만 담는 객체(VO, DTO)”를 만들 때

불필요한 보일러플레이트(boilerplate) 코드를 줄여주는 문법이지.


2. 기존 클래스와의 비교

(1) 일반 클래스

public class Member {
    private final String name;
    private final int age;

    public Member(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String name() { return name; }
    public int age() { return age; }

    @Override
    public String toString() {
        return "Member[name=" + name + ", age=" + age + "]";
    }

    @Override
    public boolean equals(Object o) { ... }
    @Override
    public int hashCode() { ... }
}

→ 코드가 너무 길고, 대부분이 단순한 데이터 보관용 코드임.


(2) Record 클래스