
@Builder는 빌더 패턴을 쉽게 사용할 수 있도록 해주는 어노테이션@Builder 를 사용하는 이유는 빌더 패턴을 사용하는 경우와 같다.1. DTO, Entity 클래스가 여러 필드를 가지는 경우
매개변수 순서를 헷갈리기 쉽고, 어떤 값이 어떤 필드에 해당하는지 한눈에 보기 어렵다.
@Builder를 활요하면 Setter를 만들지 않고도 값을 설정할 수 있어 불변성을 유지한다.final 키워드와 함께 사용해, 한 번 생성된 객체의 값이 변경되지 않도록 보장한다.@Getter
@Builder
@ToString
public class PostCreate {
@NotBlank(message = "title을 입력해주세요")
private String title;
@NotBlank(message = "content를 입력해주세요")
private String content;
}
Post post = Post.builder()
.title(postCreate.getTitle())
.content(postCreate.getContent())
.builder();
@Builder를 적용할 경우 반드시 @NoArgsConstructor를 추가-@Builder는 내부적으로 모든 필드를 매개변수로 받는 생성자 @AllArgsConstructor를 사용
@NoArgsConstructor를 추가@Builder를 사용하려면, 기본 생성자와 모든 필드를 받는 생성자를 함께 정의해야 함@Builder는 모든 필드를 포함하는 생성자를 자동으로 생성하기 때문에@AllArgsConstructor를 명시적으로 선언할 필요가 없다.@AllArgsConstructor를 추가로 선언해야 하는 경우가 있다.private 생성자를 사용하여 객체를 생성한다.new로 객체 생성 불가❌@AllArgsConstructor를 명시적으로 선언하여public 생성자도 제공하는 것이 필요할 수 있다.@Builder만 사용하면 생성자가 private이므로 직접 객체 생성을 못 할 수도 있다.@AllArgsConstructor를 추가하여 public 생성자도 제공해야 한다.@NoArgsConstructor 없이도 @Builder를 자유롭게 사용 가능하다.@Builder를 붙이면, 모든 필드를 대상으로 하는 빌더 생성@Builder를 붙이면, 해당 생성자의 파라미터를 기반으로 빌더 생성