# 빌더 패턴
복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴
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();
'개발 > Java' 카테고리의 다른 글
[JAVA8] HashMap 성능 / 내부구조 (1) | 2022.01.31 |
---|---|
[JUnit] #01. JUnit 5 개요 / Java 버전 / 예시 프로젝트 (0) | 2022.01.24 |
[Lombok] @Data / @ToString / @EqualsAndHashCode / @Getter / @Setter / @RequiredArgsConstructor (0) | 2022.01.20 |
[Java] LocalDate, ChronoUnit으로 날짜 간격 구하기(31일 간격으로 나누기) (0) | 2022.01.17 |
[Java] 체크예외, 언체크예외 초간단 정리 (0) | 2022.01.11 |
댓글