정적 팩토리와 생성자에 선택적 매개변수가 많을 때 고려할 수 있는 방안이다.
public class NutirtionFacts {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
// 1. 클래스 내부에 빌더 클래스를 만든다.
public static class Builder {
// 2. 변수 선언
// 필수 매개변수 -> final
private final int servingSize;
private final int servings;
// 선택 매개변수 -> 기본값으로 초기화
private int calories = 0;
private int fat = 0;
private sodium = 0;
private carbohydrate = 0;
// 3. 생성자 및 세터로 빌더 클래스 체이닝
// 필수값들
public Builder(int servingSize, int servings) {
this.servingSize = servingSize;
this.servings = servings;
}
// setter - > 리턴타입이 빌더타입 : 메서드 체이닝 가능
public Builder calories(int val){calories = val; return this;}
public Builder fat(int val){fat = val; return this;}
public Builder sodium(int val){sodium = val; return this;}
public Builder carbohydrate(int val){carbohydrate = val; return this;}
// 4. build() 메서드로 객체 반환
public NutritionFacts build(){return new NutritionFacts(this)};
-> 이후에 NutritionFacts nutritionFacts = new Builder(120,240)
.calories(100)
.fat(200)
.sodium(100)
.carbohydrate(0)
.build();
이런식으로 메서드체이닝을 하면서 생성.
}
}