====== 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]]