@Entity(name = "orders")
@Table(name = "orders")
@NoArgsConstructor
@Getter
public class Order extends BaseEntity {
....
@Enumerated(EnumType.STRING)
private OrderStatus status = OrderStatus.REQUESTED;
// 생성자
@Builder
public Order(... OrderStatus status) {
...
this.status = status;
}
}
Order.builder()
.a()
.b()
.c()
.build(); // status는 초기화 안했으니까 `REQUESTED` 상태가 되겠지??
null
로 받으면, 필드값을 REQUESTED
로 초기화한다.주문 생성 시에 초기 상태는 요청상태입니다.
라는null
이 들어가고 있었음..@Entity(name = "orders")
@Table(name = "orders")
@NoArgsConstructor
@Getter
public class Order extends BaseEntity {
....
@Enumerated(EnumType.STRING)
private OrderStatus status; // 수정
// 생성자
@Builder
public Order(...) {
...
// ✅ 여기서 무조건 초기화!
this.status = OrderStatus.REQUESTED;
}
...
}
Order
엔티티의 경우, 생성될 때 무조건 REQUESTED
상태를 가져야한다.order Order = Order.builder()
.a()
.b()
.c()
.build(); // ✅ 생성자 내부에서 초기화!
@Entity(name = "orders")
@Table(name = "orders")
@NoArgsConstructor
@Getter
public class Order extends BaseEntity {
....
@Builder.Default // ✅ 어노테이션 추가!
@Enumerated(EnumType.STRING)
private OrderStatus status = OrderStatus.REQUESTED;
// 생성자
@Builder
public Order(... OrderStatus status) {
...
this.status = status;
}
}
@Builder.Default
어노테이션만 추가해준다.REQUESTED
로 초기화된다.Order requestOrder = Order.builder()
.a()
.b()
.build(); // ✅ status는 기본값 "REQUESTED"로 초기화!
Order acceptedOrder = Order.builder()
.a()
.b()
.status(OrderStatus.ACCEPTED)
.build(); // ✅ status는 "ACCEPTED"로 초기화!
모든 주문은 무조건 REQUESTED
상태로 시작해야 한다!
→ 방법1: 생성자에서 초기화!
주문 생성 시점에 다양한 상태(REQUESTED, ACCEPTED 등)를 유연하게 생성한다!
→ 방법2: @Builder.Default
로 초기화!
단, 방법2는 빌더를 사용할 때만 초기화할 수 있는 방법이고,
생성자가 1개일 때 유용하게 사용할 수 있을 것 같다!
상황에 따라 유연하게 적용해보자!!
빌더... PR 리뷰 잊지 않겠습니다.. 팀 프로젝트 고생 많으셨습니다!