KOO-YS / effective-java

이펙티브 자바 3/E
0 stars 0 forks source link

@Builder Annotation #2

Open KOO-YS opened 3 years ago

KOO-YS commented 3 years ago

빌더 패턴을 이용한 객체 생성에서 Lombok 의 @Builder 어노테이션을 활용하려고 한다.

객체 내에 선택적으로 입력할 필드가 존재할 때, 선택적 필드 초기화는 어떤 방식으로 이루어질까?

후보

  • setter...?
  • builder 생성자를 선택적 필드를 적용하는 경우의 수만큼 여러 개를 만들어야 할까
package builder;

import lombok.*;

import java.util.List;

/**
 * Lombok Builder 어노테이션을 활용한 빌더 패턴 적용기
 *
 */
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder(builderMethodName = "autoBuilder")
@ToString
public class PersonAuto {

    private String name;
    private String city;
    private int grade = 1;
    private int age = Integer.MAX_VALUE;        // OPTIONAL
    private int height = Integer.MAX_VALUE;     // OPTIONAL
    private int credit = 1000;                  // OPTIONAL
    @Singular       // 리스트 요소들을 하나씩 넘길 수 있다
    private List<Integer> lottoNums;

    @Builder
    public PersonAuto(String name, String city, List<Integer> lottoNums) {
        this.name = name;
        this.city = city;
    }

    // TODO : 선택적 필드 height, age, credit 을 부분적으로 넣을 방법
}

Thinking

KOO-YS commented 3 years ago

링크 정리 확인

빌더 패턴에서 필수 매개변수와 선택 매개변수의 구분