@Builder는 롬복에 있는 어노테이션으로 객체 생성시에 편리함을 제공해준다.
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Builder
@AllArgsConstructor
@Getter
@Setter
public class Person {
private String name;
private String mother;
private String father;
}
Person person = Person.builder()
.name("John")
.father("father")
.mother("mother")
.build();
그냥 생성자로 만들지 왜 builder로 귀찮게 생성하는가?
이유는 가독성이다. 만약 new로 만든다고 한다면 아래와 같은 코드가 될 것이다.
//위 코드에서 @AllArgsConstructor로 전체 생성자를 만들어둠
Person person = new Person("John","father",,"mother");
위의 코드만 볼 때 1,2,3번째 파라미터가 어떤 값을 넣어야 하는지 알 수 있는가?
이것이 new의 단점으로 지금은 파라미터가 3개 밖에 없지만 만약 10개 이상으로 늘어나게 된다면 몇번째 파라미터에 무엇이 들어가야 하는지 계속 확인하고 집어 넣어야 한다. (4개 이상만 되도 가독성이 많이 안 좋아진다고 한다.)
그 와는 반대로 builder를 쓰게 되면 순서 상관없이 내가 원하는 파라미터에 어떤 값을 넣을지를 알 수 있기에 더욱 편리해지게 된다.
주의사항
다만 builder를 jpa와 사용시 생성자 문제가 생길 수 있는데 jpa의 경우는 기본 생성자를 필요로 함으로 builder를 쓰게 된다면 @NoArgsConstructor(access = AccessLevel.PROTECTED),
@AllArgsConstructor(access = AccessLevel.PROTECTED)를 선언하여 사용하면 된다.