@Builder
빌드 패턴을 사용하여 객체를 생성할 수 있으며 객체 생성 후 setter를 통한 접근을 제한 할수 있어서 불변형 객체를 만들 수 있다.
@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])
'java' 카테고리의 다른 글
[Mockito] doReturn / thenReturn (0) | 2021.08.04 |
---|---|
[Java] Jackson - JSON 파일 읽기 - 저장 (0) | 2021.04.15 |
[JPA] 영속성 컨텍스트(persistence context) (0) | 2020.08.31 |
[JPA] EntityManagerFactory/EntityManager (0) | 2020.08.30 |
[JPA] jpa 설정 - persistence.xml (0) | 2020.08.29 |