2015. 1. 25. 21:02




선택적 인자가 많은 객체를 만들때 '점층적 생성자 패턴'을 사용한다. 필수인자만 받는 생성자 하나를 정의하고, 선택적 인자를 하나 받는 생성자를 추가하고, 선택적 인자를 두개받는 생성자를 하나 추가하는 식으로 점층적으로 인자의 갯수를 늘리는 식의 패턴이다. 예제 코드를 살펴보면,


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
public class NutiritionFacts {
    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 NutiritionFacts ( int servingSize, int servings ) {
        this( servingSize, servings, 0 );
    }
 
    public NutiritionFacts ( int servingSize, int servings, int calories ) {
        this( servingSize, servings, calories, 0 );
    }
 
    public NutiritionFacts ( int servingSize, int servings, int calories, int fat ) {
        this( servingSize, servings, calories, fat, 0 );
    }
 
    public NutiritionFacts ( int servingSize, int servings, int calories, int fat,
                            int sodium) {
        this( servingSize, servings, calories, fat, sodium, 0 );
    }
 
    public NutiritionFacts ( int servingSize, int servings, int calories, int fat,
                            int sodium, int carbohydrate ) {
        this( servingSize, servings, calories, fat, sodium, carbohydrate );
    }
}
cs


필수 항목을 제외하고는 설정하려는 인자를 순서에 맞게 호출하면 된다.

1
2
NutiritionFacts cocaCola = new NutiritionFacts(240810033527);
 
cs


이런 패턴의 문제점이 몇가지 있는데, 설정할 필요가 없는 필드에도 인자를 전달해야 하는 점과(예제에서는 0으로 전달해야한다.) 인자 수가 늘어나면 이 인자가 무슨 인자인지 저 인자가 무슨 인자인지 알 수 없는 경우가 생긴다.


<참고서적 : Effective Java 2/E>

Posted by 미뤽