Item2
생성자에 매개변수가 많다면 빌더를 고려하라
- 정적 팩토리 메소드와 생성자는 선택적 매개변수가 많은 경우 적절히 대응하기 어렵다
- 이렇게 선택적 매개변수가 많은 경우 객체의 생성 패턴을 알아보자
- 점층적 생성자 패턴
- 자바 빈즈 패턴
- 빌더 패턴
1 점층적 생성자 패턴
- telescoping constructor pattern이라고 한다.
- 필수 매개변수만 받는 생성자, 필수 매개변수와 선택 매개변수 1개를 받는 생성자, 선택 매개변수를 2개까지 받는 생성자, ..., 선택 매개변수를 전부 받는 생성자까지 늘려가는 방식
- 확장하기 어렵다
- 매개변수가 많아지면 클라이언트 코드를 작성하거나 읽기 어렵다
예시
public class NutritionFacts {
private final int servingSize; // 필수
private final int servings; // 필수
private final int calories; // 선택
private final int fat; // 선택
private final int sodium; // 선택
private final int carbohydrate; // 선택
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, servings, calories, fat, 0);
}
public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium) {
this(servingSize, servings, calories, fat, 0);
}
public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium, int carbohydrate) {
this.servingSize = servingSize;
this.servings = servings;
this.calories = calories;
this.fat = fat;
this.sodium = sodium;
this.carbohydrate = carbohydrate;
}
}