JAVA/DesignPattern

Design Pattern 디자인 패턴 Builder Pattern 빌더 패턴

호두밥 2021. 12. 15. 00:33

Builder Pattern 빌더 패턴

생성자를 이용해 객체를 생성할 때 더 편리하게 해주는 디자인 패턴입니다. 

객체의 구성요소(변수)가 많은 경우, 객체 생성자의 input 요소가 많은 경우에는 아래와 같이 생성자가 길어지고 복잡하게 됩니다. 이런 경우 어느 한 요소가 빠지게 되거나, 요소의 순서가 뒤바뀐 경우 에러를 찾아내기가 어려워집니다. 

또는 구성요소가 없어지거나, 추가 될때마다 새로운 생성자를 만들어주어야 합니다. 이런 불편함을 해소하고, 객체를 생성할 때 input 요소를 하나씩 넣어줄 수 있도록 해주는 패턴이 빌터 패턴입니다.  

public class Object{
	private String a;
    private String b;
    private String c;
    private String d;
    private String e;
    private String f;
    private String g;
    private String h;
    private String i;    
    
    public Object(String a, String b, String c, String d,
    			String e, String f, String g, String h, String i ){
         this.a = a;
         this.b = b;
         this.c = c;
         this.d = d;
         this.e = e;
         this.f = f;
         this.g = g;
         this.h = h;
         this.i = i;    
    }
    
}


Object object = new Constructor(a, b, c, d, e, f, g, h, i);

빌더 패턴의 장단점

장점

  • 객체 생성을 단계적으로 진행할 수 있고, 각 단계를 반복할 수도 있습니다.
  • 동일한 객체 생성 코드를 다른 생성자 형식에서도 재사용할 수 있습니다.
  • 비즈니스 로직에서 복잡한 생성자 로직을 분리할 수 있습니다. 

단점

  • 클래스가 많아질수록 코드의 전체적인 복잡도는 늘어날 수 있습니다. 

Builder Pattern 빌더 패턴 구현

public class ObjectBuilder {

    private String a;
    private String b;
    private String c;
    private String d;
   
    public ObjectBuilder setA(String a){
        this.a = a;
        return this;
    }
    public ObjectBuilder setB(String b){
        this.b = b;
        return this;
    }
    public ObjectBuilder setC(String c){
        this.c = c;
        return this;
    }
    public ObjectBuilder setD(String d){
        this.d = d;
        return this;
    }

    public Object build(){
        return new Object(a,b,c,d);
    }
}

빌터패턴은 아래와 같이 사용합니다.

ObjectBuilder builder = new ObjectBuilder();
Object object = builder.setA("a").setC("C").setB("B").setD("D").build();

* lombok 패키지를 사용하면 builder 패턴을 간편하게 사용할 수 있습니다. https://projectlombok.org/

참조