====== lombok @Builder ======
* [[https://projectlombok.org/features/Builder|@Builder]]
===== 주의점 =====
* see [[java:lombok:pitfall|Lombok 사용상 주의점(Pitfall)]]
* 클래스에 붙이지 말고, 항상 명시적 생성자나 메소드에 붙여야 한다.
===== 기본값 =====
* 지정하지 않으면 ''null'', ''0'', ''false'' 가 기본이다.
* ''@Builder.Default'' 를 필드에 붙여 기본값을 지정할 수 있는데, 사용하지 않기를 권함. 이 경우는 class에 붙일때만 작동할 것으로 보임.
* 생성자나 메소드에서 명시적으로 기본값을 지정할 것.
===== @Singluar =====
* 원칙적으로 ''setter'' 기반으로 builder가 만들어지는데 Java Collections와 [[java:guava|Guava]] Collections 에 대해서 ''@Singluar'' 어노테이션을 주면 값을 한개씩 혹은 여러개를 추가하는 build method와 전체 clear 메소드를 만들어줌.
@Singular("axis") List axes;
// axis(Line line) 메소드가 생김
===== final 혹은 수정 불가 클래스에 대한 builder =====
* 수정할 수 없는 클래스가 있을 때 이에 대한 builder 를 별도 클래스에서 메소드로 빼서 만들 수 있다.
// 소스 제어권이 없는 클래스
@Value
final class ImmutableClient {
private int id;
private String name;
}
// 별도의 빌드 전용 클래스와 메소드
class ClientBuilder {
@Builder(builderMethodName = "builder")
public static ImmutableClient newClient(int id, String name) {
return new ImmutableClient(id, name);
}
}
ImmutableClient testImmutableClient = ClientBuilder.builder()
.name("foo")
.id(1)
.build();
assertThat(testImmutableClient.getName())
.isEqualTo("foo");
assertThat(testImmutableClient.getId())
.isEqualTo(1);
===== 참조 =====
* [[https://www.baeldung.com/lombok-builder|Using Lombok's @Builder Annotation | Baeldung]]