프로그래밍과 잡담

[Java] 자바 빈 패턴.. 본문

프로그래밍/HTML,Java,Jsp,EJB,Struts

[Java] 자바 빈 패턴..

크레온 2012. 3. 25. 14:55
이펙티브 자바 원본을 어떻게 구해서 심심해서 영어실력이나 쌓을 려고 번역하면서 보고 있는데

자바빈 패턴(Javabean pattern)이란게 있더군.  

근데 되게 간단하고 자주 사용하는 방법이더군.

처음부터 결론을 말하자면 setter 메소드를 쓰는거다.


이펙티브 자바에서 말하길
생성자에 많은 매개변수가 붙어 있을 경우 대안으로 사용 할 수 있는 패턴이라 나오는군..

예를 들면  
 
public class NutritionFacts {
    private final int servingSize; // (mL) required
    private final int servings; // (per container) required
    private final int calories; // optional
    private final int fat; // (g) optional
    private final int sodium; // (mg) optional
    private final int carbohydrate; // (g) optional
    public NutritionFacts(int servingSize, int servings) {
        this(servingSize, servings, 0);
    }
    public NutritionFacts(int servingSize, int servings,int calories) {
        this(servingSize, servings, calories, 0);
    }
    ...
    ...


위에 있는 NutritionFacts(영양 분석) 클래스 처럼  생성자에 매개변수가 4개가 아니라 6개, 7개 이상 씩 붙어버리면
상당히 귀찮게 된다.  왜냐하면  타입들이 동일하다. 둘다 int 타입이기 때문에 실수를 할 수 있된다.
위에있는 클래스는 이펙티브 자바에 나온다.

위에 있는 방식을 이펙티브 자바에서는 Telescoping Constructor Pattern(신축식(직역하자면) 생성자 패턴) 이라고 한다.  
말만 그렇지 맴버 필드를 초기화 시킬려고 생성자에 매개변수를 넣어서 생성자 막 오버라이딩하는 거지 뭐..

어찌됐든 저와 같은 방식은 실수를 할 수 있기 때문에  자바빈 패턴을 대안으로 말하고 있다.


자바빈 패턴이라는게 그다지 설명할 게 없다.

위에 썼듯이 setter 메소드를 통해서 만드는 것이다.


 
public class NutritionFacts {
    // Parameters initialized to default values (if any)
    private int servingSize = -1; // Required; no default value
    private int servings = -1; // " " " "
    private int calories = 0;
     .... 
     ....
    //contructor
    public NutritionFacts() { }
    //setter
    public void setServingSize(int val) { servingSize = val; }
    public void setServings(int val) { servings = val; }
    public void setCalories(int val) { calories = val; }
    ...
    ...

위에 있는 것 처럼 생성자는 그냥 껍대기를 쓰고 
setter 메소드를 차례로 불러오는 거란다.

근데 이게 다인 모양이다.

뭐 그다지 나한테는 새로워 보이지는 않는다. 그냥 이름을 몰랐을 뿐이지. 
반응형
Comments