2015. 1. 26. 22:19



생성자에 전달하는 인자수가 많은 때 점층적 생성자 패턴과 함께 적용가능한 두번째 패턴은 자바빈 패턴이다.인자가 없는 생성자를 통해 객체를 만든 후, 설정 메서드들을 호출하여 필수, 선택 필드들을 채우는 방법이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class NutritionFacts {
    private int servingSize = -1;              // 필수
    private int servings = -1;                   // 필수
    private int calories = 0;                     // 선택
    private int fat = 0;                             // 선택
    private int sodium = 0;                      // 선택
    private int carbohydrate = 0;             // 선택
 
    public NutritionFacts() { }
 
    //    setter
    public void setServingSize( int val ) { servingSize = val; }
    public void setServings( int val ) { servings = val; }
    public void setCalories( int val ) { calories = val; }
    public void setFat( int val ) { fat = val; }
    public void setSodium( int val ) { sodium = val; }
    public void setCarbohydrate( int val ) { carbohydrate = val; }
}
cs



위 코드를 통해 생성자 객체를 생성하고 인자를 넣는 방법은


1
2
3
4
5
6
NutritionFacts cocaCola = new NutritionFacts();
cocaCola.setServingSize( 240 );
cocaCola.setServings( 8 );
cocaCola.setCalories( 100 );
cocaCola.setSodium( 35 );
cocaCola.setCarbohydrate( 27 );
cs


이 패턴은 점층적 생성자 패턴과는 다르게 읽기도 쉽고 생성하기도 좋다. 하지만 이 패턴에는 두가지 심각한 단점이 있는데, 첫번째는 1회의 함수 호출로 객체 생성을 끝낼 수 없으므로, 객체 일관성(consistency)이 일시적으로 깨질 수 있다는 점이고 두번재는 자바빈 패턴으로는 변경 불가능(immutable)클래스를 만들 수 없다는 것이다.


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


Posted by 미뤽