생성자 패턴

2009. 6. 1. 11:56 from JSP
텔레스코핑(telescoping) 생성자
public class Test {
  private final int servingSize;
  private final int servings;
  private final int calories;

  public Test( int servingSize, int servings ){
    this( servingSize, servings, 0 );
  }

  public Test( int servingSize, int servings, int calories ){
    this.servingSize = servingSize;
    this.servings = servings;
    this.calories = calories;
  }
}
매개변수값이 작을 경우에는 유용하지만 길어지면 파라메터의 용도파악이 어려움

자바빈즈패턴
public class Test {
  private int servingSize = -1;
  private int servings = 0;
  private int calories = 0;
  public Test( ){}
 
  public void setServingSize( int val ){
    servingSize = val;
  }
  public void setServings( int val ){
    servings = val;
  }
  public void setCalories( int val ){
    calories = val;
  }
}
객체 생성후 여러번의 setter 메소드를 호출하여 파라메터를 전달해야만 사용가능한 인스턴스를 생성할 수 있고 불변 클래스생성이 불가능;;

빌더패턴
public class Test {
  private final int servingSize;
  private final int servings;
  private final int calories;
 
  public static class Builder {
    private final int servingSize;
    private final int servings = 0;
    private final int calories = 0;
   
    public Builder( int val ){
      this.servingSize = val;
    }
    public Builder servings( int val ){
      this.servings = val;
      return this;
    }
    public Builder calories( int val ){
      this.calories = val;
      return this;
    }
    public Test build(){
      return new Test(this);
    }
  }
  private Test(Builder builder){
    servingSize = builder.servingSize;
    servings = builder.servings;
    calories = builder.calories;
  }
}
사용법::
Test a = new Test.Builder(1).servings(1).calories(1).build();

생성자에 많은 매개변수가 필요할 경우 유용함
Posted by 윤재현 :