1.@Builder를 사용하면 어떤 필드에 어떤 값을 넣어야 하는지 명확하게 지정할 수 있다.
2.기존 생성자 방식을 사용하지 않고 객체를 생성할 수 있다.
3.Setter를 이용하는 방식보다 안전하며, Setter 생성을 방지하기 때문에 객체를 변경할 수 없다.(불변성 보장),
4.lombok에서 제공해준다.
5.파라미터 순서가 바뀌는 등 골치 아픈 일을 막아준다.
post 클래스
public class Post {
private String title;
private String content;
public Post(String title, String content) {
this.title = title;
this.content = content;
}
public Post(){
}
// Getter
public String getTitle() {
return title;
}
public String getContent() {
return content;
}
//Setter
public String setTitle(String title){
this.title = title
}
public String setContent(String content){
this.content = content
}
}
기본 생성자 방식 1
Post post = new Post();
post.setTitle("제목1");
post.setContent("내용1");
기본 생성자 방식 2
Post post = new Post("제목1","내용1");
객체 프로퍼티가 많아 지면 코드가 길어지고 파라미터 위치가 변경되면 골치가 아프게 된다. setter를 이용하면 객체의 불변성도 보장하지 못한다. 단점이 팍팍 드러나는 코드이다.
post 클래스
@Getter
public class Post {
private String title;
private String content;
@Builder
public Post(String title, String content) {
this.title = title;
this.content = content;
}
@Builder 패턴
Post post = Post.builder()
.title("제목")
.content("내용1")
.build();
객체의 프로퍼티가 많아져도 코드가 가독성이 좋고, All생성자를 만들고 @Builder만 붙여주면 원하는 객체만 set할 수 있다.setter를 이용하지 않기 때문에 객체의 불변성도 보장된다. @Getter만 클래스에 달아주면 getter,setter 다 가능하다.
void test1(){
//given
PostCreate post = PostCreate.builder()
.title("제목입니다.")
.content("내용입니다.")
.build();
//expected
assertThat(post.getTitle).isEqualTo("제목입니다");
assertThat(post.getContent).isEqualTo("내용입니다.");
}