취업과 기본기 튼튼/빽 투더 기본기
[디자인 패턴 4편] 생성 패턴, 빌더 (Builder)
흠시
2020. 2. 17. 22:57
여기서 말하는 빌더 패턴은 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
에 담긴 정보로 객체를 만든다는 것.