@Builder@Builder 는 이 문제를 해소@NoArgsConstructor 를 선언하기 때문에 추가적으로 생성해줘야 함@AllArgsConstructor 많이 사용@Builder 를 Class 위에 선언@Builder 를 Constructor 위에 선언하기@Builder를 적용해야 할 수 있음@Builder 를 사용하는 것이 좋음@Builder 를 사용하는 것이 바람직@Builder 를 사용하여 복잡성을 관리@Builder 를 사용하는 것이 유리@Builder를 사용하면 코드가 더 간결해지고 유지보수가 용이할 수 있음@Builde 를 적용하는 것이 더 일반적이고 간편하지만, 복잡한 도메인 모델이나 염격한 객체 생성 규칙을 가진 경우에는 생성자 레벨에서의 적용이 더 적합@Builder 를 Constructor 위에 선언 - 필수값 체크 방법Assert
public class Book {
private String bookName;
private String author;
private Integer price;
@Builder
public Book(String bookName, String author, Integer price) {
Assert.hasText(bookName, "책이름이 없습니다");
Assert.hasText(author, "저자명이 없습니다");
//Assert.notNull(price, "가격이 설정되지 않았습니다");
this.bookName = bookName;
this.author = author;
this.price = price;
}
}
Exception in thread "main" java.lang.IllegalArgumentException: 책이름이 없습니다
@NonNull
@Builder
public Book(@NonNull String bookName, @NonNull String author, Integer price) {
this.bookName = bookName;
this.author = author;
this.price = price;
}
Exception in thread "main" java.lang.NullPointerException: bookName is marked non-null but is null
@Builder 를 Constructor 위에 선언하고 @NonNull을 사용하는게 적합해보임@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; // 선택적 필드
@NonNull
private String name; // 필수 필드
@NonNull
private Integer age; // 필수 필드
@Builder
public Member(String name, Integer age) {
this.name = name;
this.age = age;
}
}