여기서 말하는 빌더 패턴은 GoF 의 책에서 소개하는 Builder 패턴이 아니라, Effective JAVA 2/E 에서 소개되는 Builder 패턴입니다. 개인적으로 후자가 더 많이 쓰이는 것을 보았어서, Effective JAVA 에서 소개되는 패턴을 기준으로 정리합니다.
1. 개념
빌더 패턴은 생성 인자가 많을 시,
빌더 객체를 통해 구체적인 객체를 생성한다.
1.1. 장점
- 객체 생성에 필요한 파라미터의 의미를 코드 단에서 명확히 알 수 있다. (가독성이 좋다.)
- 생성에 필요한 파라미터가 추가될 때 마다, 생성자 오버로딩을 안해도 된다.
1.2. 단점
- 추가적인 빌더 클래스 구현해야 함.
1.3. 활용 상황
- 생성자 인자가 많은 경우.
예를 들면 다음 코드보다,
WebBrowser browser = new WebBrowser();
browser.setSslEnabled(true);
browser.setPlugins(new FlashPlugin());
browser.setCookieEnabled(true);
빌더 패턴을 적용한 다음 코드가 훨씬 가독성도 좋고, 코딩하기도 편하다.
WebBrowser browser = new BrowserBuilder()
.withSsl()
.withFlashPlugin()
.withCookieSupport()
.build();
2. 구조 & 코드
솔직히 JDM님 블로그에 너무나 잘 설명되어 있어서, 링크만 걸어둔다.
빌더 클래스를 만드는데, 가장 핵심이 되는 부분은 다음 파트다.
public class PersonInfoBuilder {
private String name;
...
public PersonInfoBuilder setName(String name) {
this.name = name;
return this;
}
...
public PersonInfo build(){
PersonInfo personInfo = new PersonInfo(name, age, favoriteColor, favoriteAnimal, favoriteNumber);
return personInfo;
}
}
Setter
의 리턴 값으로this
를 내보내어, 활용하는 입장에서는 chain 형식으로 메쏘드를 호출할 수 있게 한 것.build
로 최종적으로builder
에 담긴 정보로 객체를 만든다는 것.
3. 참고
'취업과 기본기 튼튼 > 빽 투더 기본기' 카테고리의 다른 글
[디자인 패턴 6편] 구조 패턴, 어댑터(Adapter) (0) | 2020.02.18 |
---|---|
[디자인 패턴 5편] 생성 패턴, 추상 팩토리 메쏘드 (Abstract Factory) (0) | 2020.02.17 |
[디자인 패턴 3편] 생성 패턴, 팩토리 메쏘드 (Factory) (0) | 2019.11.21 |
[디자인 패턴 2편] 생성 패턴, 싱글톤(Singleton) (0) | 2019.11.21 |
[디자인 패턴 1편]. 디자인 패턴 개요 (0) | 2019.11.19 |