텔레스코핑(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;
}
}
매개변수값이 작을 경우에는 유용하지만 길어지면 파라메터의 용도파악이 어려움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 메소드를 호출하여 파라메터를 전달해야만 사용가능한 인스턴스를 생성할 수 있고 불변 클래스생성이 불가능;;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;
}
}
빌더패턴
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();
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();
생성자에 많은 매개변수가 필요할 경우 유용함