public class NutritionFacts {
private final sevingSize;
private final servings;
private final int calories;
private final int fat;
private final int sodium;
public NutritionFacts(int servingSize, int servings) {
this(servingSize, servings, 0);
}
public NutritionFacts(int servingSize, int servings, int calories) {
this(servingSize, servings, calories, 0);
}
public NutritionFacts(int servingSize, int servings, int calories, int fat) {
this.servingSize = servingSize;
this.servings = servings;
this.calories = calories;
this.fat = fat;
}
}
작동방식
빌더는 생성할 클래스 안에 정적 멤버 클래스로 만들어두는 것이 보통이다.
Builder의 Setter 메서드
NutritionFacts cocacola = NutritionFacts.Builder(240, 8).calories(100).sodium(35).carbohydrate(27).build();
유효성 검사 코드
빌더의 생성자와 메서드에서 입력 매개변수를 검사
build 메서드가 호출하는 생성자 = NutritionFacts(Builder builder)에서 여러 매개변수에 걸친 불변식(invariant)을 검사
빌더를 사용하면 가변인수(varargs) 매개변수를 여러 개 사용할 수 있다.
빌더는 매우 유연함
단점
객체 생성 이전에 빌더를 만들어야 함
매개변수가 많을 때에나 빛을 발함