item 02. 생성자에 매개변수가 많다면 빌더를 고려하라
클래스용 생성자 혹은 정적 팩토리의 모습
첫 번째 대안 : 점층적 생성자 패턴
점층적 생성자 패턴이란?
public class NutritionFacts {
// 필수 필드
private final int servingSize; // (ml, 1 회 제공량)
private final int servings; // (회, 총 n회 제공량)
// 선택적 필드
private final int calories; // (1회 제공량당)
private final int fat; // (g/1 회 제공량)
private final int sodium; // (mg/1 회 제공량)
private final int carbohydrate;// (g/1 회 제공량)
// 필수 필드만 받는 생성자
public NutritionFacts(int servingSize, int servings) {
this(servingSize, servings, 0); // 다른 생성자 호출
}
// 필수 필드 + 선택적 필드 (calories)
public NutritionFacts(int servingSize, int servings, int calories) {
this(servingSize, servings, calories, 0); // 다른 생성자 호출
}
// 필수 필드 + 선택적 필드 (calories, fat)
public NutritionFacts(int servingSize, int servings, int calories, int fat) {
this(servingSize, servings, calories, fat, 0); // 다른 생성자 호출
}
// 필수 필드 + 선택적 필드 (calories, fat, sodium)
public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium) {
this(servingSize, servings, calories, fat, sodium, 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;
}
}
두 번째 대안 : 자바빈즈(javaBeans patteren) 패턴
자바빈즈 패턴이란?
자바 빈즈 패턴의 장점
자바 빈즈 패턴의 단점
세 번째 대안 : 빌더 패턴(Builder pattern)
빌더 패턴이란?
메서드 연쇄(method chaining) 혹은 플루언트 API(fluent API)
클라이언트 코드의 모습
장점
단점
계층적으로 설계된 클래스와 쓰기 좋은 빌더 패턴
1. 추상 클래스 Pizza
2. 뉴욕 피자 (NyPizza)
Last updated