[이펙티브자바]아이템2.빌더 패턴

JP·2022년 7월 9일
0

자바

목록 보기
9/10

빌더패턴

정적 팩토리와 생성자에 선택적 매개변수가 많을 때 고려할 수 있는 방안이다.

  • 메서드 체이닝을 한다
  • 계층적으로 설계된 클래스와 함께 사용하기 좋다
  • 코드를 읽기 쉽고 쓰기 간결하다.

생성 방법

  1. 클래스 내부에 빌더 클래스를 만든다.
  2. 빌더 클래스에 사용될 변수를 선언한다
    • 필수값은 final
    • 선택적인 값은 기본값으로 초기화
  3. 생성자 및 세터로 빌더 클래스를 체이닝 한다.
    • 필수값은 생성자
    • 선택값들은 세터
  4. build()메서드를 통해 객체를 반환한다.

예제 코드

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();
                                            이런식으로 메서드체이닝을 하면서 생성.
  }
}
profile
to Infinity and b

0개의 댓글