Item2: 생성자에 매개변수가 많다면 빌더를 고려하라
점층적 생성자 패턴
자바 빈즈 패턴
빌더 패턴 ✔️
public class NutritionFacts {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;
public static class Builder {
/* 필수 매개변수 */
private final int servingSize;
private final int servings;
/* 선택 매개변수 */
private int calories = 0;
private int fat = 0;
private int sodium = 0;
/* 필수 매개변수만 파라미터로 받는 정적 팩토리 메소드 Builder */
public Builder(int servingSize, int servings) {
this.servingSize = servingSize;
this.servings = servings;
}
/* 일종의 setter 메소드. 단 Builder 객체를 반환한다. */
public Builder calories(int val) {
this.calories = val;
return this;
}
public Builder fat(int val) {
this.fat = val;
return this;
}
public Builder sodium(int val) {
this.sodium = val;
return this;
}
/* 매개변수가 없는 build 메소드. 불변객체를 반환한다. */
public NutritionFacts build() {
return new NutritionFacts(this);
}
}
private NutritionFacts(Builder builder) {
this.servingSize = builder.servingSize;
this.servings = builder.servings;
this.calories = builder.calories;
this.fat = builder.fat;
this.sodium = builder.sodium;
}
}
// 클라이언트 코드
final NutritionFacts fact = new NutritionFacts.Builder(240, 8)
.calories(100)
.sodium(35)
.fat(10)
.build(); 계층적으로 설계된 클래스 & 빌더 패턴
lombok @Builder와 @SuperBuilder
적용 코드
Last updated