@Builder

  • 빌드 패턴을 사용하여 객체를 생성할 수 있으며 객체 생성 후 setter를 통한 접근을 제한 할수 있어서 불변형 객체를 만들 수 있다.

  • https://projectlombok.org/features/Builder

@Builder

  • builder 패턴을 사용 할수 있게 선언

  • 클래스명.builder() 로 시작하여 값을 셋팅 후 build()를 호출하여 객체 생성

      BuilderVO b = BuilderVO.builder()
                                 .id("test")
                                 .age(11)
                                 .build();

@Builder(toBuilder = true)

  • builder 패턴으로 생성된 객체의 일부 값을 변경한 새로 운 객체를 생성
    BuilderVO b = BuilderVO.builder()
                                .id("test")
                                .age(11)
                                .build();

    // id/age 값만 변경된 새로운 객체를 생성 
    BuilderVO b2 = b.toBuilder().id("test2").age(100000).build();

@Builder.Default

  • 변수의 기본 값

     // 기본 값 null
      private List<String> nullItem;
    
     // 기본 값 []
     @Builder.Default
     private List<String> defaultItem = new ArrayList<String>();

@Singular

    @Singular("singularItem")
    private List<String> singularItem;

    // 아래와 같은 방법으로 리스트에 추가 할수 있다.
    BuilderVO.builder()
            .singularItem("test1")
            .singularItem("test2")
            .singularItem("test3")
            .build();

테스트


@Builder(toBuilder = true)
@ToString
public class BuilderVO {

    private String id;

    @Builder.Default
    private String name = "test";

    private int age;

    private List<String> nullItem;

    @Builder.Default
    private List<String> defaultItem = new ArrayList<String>();

    private List<String> item;

    @Singular("singularItem")
    private List<String> singularItem;
}

    // 
    BuilderVO b = BuilderVO.builder()
                                .id("test")
                                .age(11)
                                .item(Arrays.asList("t1", "t2"))
                                .singularItem("test1")
                                .singularItem("test2")
                                .singularItem("test3")
                                .singularItem(Arrays.asList("t1", "t2"))
                                .build();
    System.out.println("BuilderVO 생성 b: "+ b.toString());

    BuilderVO b2 = b.toBuilder().id("test2").age(100000).build();
    System.out.println("id/age 변경  b: " + b.toString());
    System.out.println("id/age 변경  b2:" + b2.toString());

결과 값

BuilderVO 생성 b: BuilderVO(id=test, name=test, age=11, nullItem=null, defaultItem=[], item=[t1, t2], singularItem=[test1, test2, test3, t1, t2])
id/age 변경  b: BuilderVO(id=test, name=test, age=11, nullItem=null, defaultItem=[], item=[t1, t2], singularItem=[test1, test2, test3, t1, t2])
id/age 변경  b2:BuilderVO(id=test2, name=test, age=100000, nullItem=null, defaultItem=[], item=[t1, t2], singularItem=[test1, test2, test3, t1, t2])

+ Recent posts