[JAVA / Design Pattern] 생성자 인자가 많을 때는 Builder 패턴을 적용해보자
정적 팩터리나 생성자는 같은 문제를 갖고 있다. 선택적 인자가 많은 상황에 잘 적응하지 못한다는 것이다. 포장 판매되는 음식에 붙어있는 영양 성분표를 나타내는 클래스로 예를 들어보면, 이 성분표에 반드시 포함되어야 하는 항목은 몇 가지 되지 않는다. 총 제공량(serving size), 1회 제공량(servings per container), 1회 제공량당 칼로리(calories per servings) 등이 그런 항목이다. 그러나 선택적인 항목은 무려 20개가 넘는다. 총 지방 함량(total fat), 포화 지방 함량(saturated fat), 트랜스 지방 함량(trans fat) 콜레스테롤 함량(cholesterol) 등이 그런 항목이다. 보통 프로그래머들은 이런 상황에 점층적 생성자 패턴을 적용한다. 필수 인자만 받는 생성자를 하나 정의하고, 선택적 인자를 하나 받는 생성자를 추가하고, 거기에 두 개의 선택적 인자를 받는 생성자를 추가하는 식으로, 생성자들을 쌓아 올리듯 추가하는 것이다. 결국 모든 선택적 인자를 다 받는 생성자를 추가하면 정의는 끝나게 된다. 첫번 째 방법은 점층적 생성자 패턴이다. 실제코드가 어떻게 작성되는지 살펴보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 public class NutritionFacts { private final int servingSize; //필수 인자 private final int servings; //필수 인자 private final int calories; //선택 인자