소프트웨어 개발/Design Pattern

⑩ 디자인 패턴(Design Pattern) - Builder

늘근이 2014. 11. 5. 23:05

package builderpattern; package builderpattern; public class Gorakgarak { private boolean sexy; private boolean handsome; private String phoneNumber; public static class Builder { //클래스 안에 static으로 바로 사용할수 있게 위치시켜줌. private boolean sexy; private boolean handsome; private String phoneNumber; public Builder(){ System.out.println("test"); } public Builder sexy(boolean value){ sexy = value; return this; } public Builder handsome(boolean value){ handsome = value; return this; } public Builder phoneNumber(String value){ phoneNumber = value; return this; } public Gorakgarak build() { return new Gorakgarak(); } } } ////////////////////////////////////////////////// package builderpattern; public class maintest { public static void main(String[] args) { System.out.println("a"); Gorakgarak gorakgarak = new Gorakgarak.Builder() //여기까지는 static클래스 생성자 호출 .sexy(true) .handsome(true) .phoneNumber("not available to you") .build(); //이게 최종적으로 Gorakgarak 객체를 되돌려준다. } }


참고: http://stackoverflow.com/questions/328496/when-would-you-use-the-builder-pattern


빌더패턴은 참 어떻게 보면 머리가 띵한 패턴이다. 사실은 그다지 어렵지 않은데, public class안에 static한 public class가 다시 Builder란 이름을 가지고 위치하면서, 쉽게 만드는데 도움을 주고 있다. 이 static클래스 안의 각 함수들, 즉 sexy()나 handsome()과같은 함수들은 Builder를 다시 리턴하면서 계속적인 Method Chaning을 가능케한다. 최종적으로 객체를 리턴하는건 .build()로 돌려주게 하는데, 이는 Gorakgarak을 리턴하기 때문에 결론적으로는 마지막과 같은 문장이 성립이 되는것이다.

빌더패턴을 쓰는 이유는, 여러가지 생성자를 통해 헷갈리지 않아도 된다는 장점이 있다. 사실 여러 생성자를 만들다보면 순서도 헷갈리고 타입이 겹쳐 다른 생성자와 겹치는 경우가 생기는 경우가 있다. 빌더패턴을 이용하면 이러한 점을 극복할수 있다. 허나, 보통의 개발자는 기본적인 생성자를 만드는 패턴에 익숙해져있을 가능성이 높기 때문에 VO객체를 까보면 이해할수 있는 분들이 그다지 많지 않을지도 모른다.