본문 바로가기
개발/Java

[Lombok] @Builder / @Builder.Default / @Singular

by Allonsy 2022. 1. 21.
반응형

# 빌더 패턴

복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴

2 단어 요약 : 생성자 오버로딩 (위키백과 참조)

(위키백과 참조)

@Builder

@Builder 어노테이션은 class, 생성자, method에 위치할 수 있다

 

@Builder가 만들어주는 7가지

1. 내부 정적 클래스(FooBuilder)

2. private 필드(Builder의 각 파라미터에 해당하는 필드, static X, final X)

3. pacakge private(접근제한자:default)의 아규먼트가 없는 빈 생성자

4. Builder의 각 파라미터에 대해, setter와 비슷한 메서드 - 파라미터와 같은 타입, 같은 이름. builder 자신을 반환

5. build() 메서드 - FooClass의 생성자를 호출하여 FooClass 객체 반환

6. toString()

7. builder() 메서드 - builder의 새 인스턴스를 만들어서 반환

 

@Builder.Default

필드의 초기값 지정

@Builder.Default private final long created = System.currentTimeMillis();

@Singular

collection 타입에 사용 / 여러번 필드값을 추가 할 수 있음

- java.util

: Iterable, Collection, List, Set, SortedSet, NavigableSet, Map, SortedMap, NavigableMap

- com.google.common.collect

: ImmutableCollection, ImmutableList, ImmutableSet, ImmutableSortedSet, ImmutableMap, ImmutableBiMap, ImmutableSortedMap, ImmutableTable

@Builder 예문

import lombok.Builder;
import lombok.Singular;
import java.util.Set;

@Builder
public class BuilderExample {
  @Builder.Default private long created = System.currentTimeMillis();
  private String name;
  private int age;
  @Singular private Set<String> occupations;
}
BuilderExample.builder()
	.name("AllonsyIT")
	.age(30)
	.occupation("developer")
	.occupation("bloger")
	.build();
반응형

댓글