빌더 패턴을 엔티티 외부에서 사용하는 것이 위험하다고 주장. 명확하게 생성할 것
→ 값이 명확하게 들어갔는지 파악이 불가할 수 있기 때문임
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는 불변(immutable) 데이터 클래스를 간단하게 정의하기 위한 특별한 클래스야.
기존의 Java 클래스에서
getter, equals(), hashCode(), toString() 같은 반복되는 코드를 자동으로 생성해주는 간결한 문법(syntax sugar) 이라고 보면 돼.
즉,
“데이터만 담는 객체(VO, DTO)”를 만들 때
불필요한 보일러플레이트(boilerplate) 코드를 줄여주는 문법이지.
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() { ... }
}
→ 코드가 너무 길고, 대부분이 단순한 데이터 보관용 코드임.