생성자 인자가 많거나 생성 순서가 복잡한 객체를, 필요한 단계를 하나씩 호출해 조립한 뒤 마지막에 완성품을 받는 패턴.
const query = new QueryBuilder()
.from('orders')
.where('status', '=', 'paid')
.orderBy('createdAt', 'desc')
.limit(20)
.build()- 인자가 열 개쯤 되는 생성자에서 몇 번째가 무엇인지 헷갈리는 문제(점층적 생성자, Telescoping Constructor)를 푼다
- 선택 항목이 많을 때 필요한 것만 골라 설정할 수 있다
- 같은 조립 단계로 다른 표현을 만들 수 있다. 단계 순서를 아는 감독(Director) 객체를 따로 두기도 한다
- 필수 값이 빠지지 않도록
build()에서 검증하거나, 타입으로 단계를 강제한다 - 단순한 객체에는 과하다. JavaScript·TypeScript에서는 객체 리터럴 하나와 기본값으로 충분한 경우가 많다(매개변수 객체 만들기)
ORM의 쿼리 빌더, HTTP 요청 빌더, 테스트 데이터를 만드는 빌더가 흔한 사용처다. 자바에서는 Lombok의 @Builder가 보일러플레이트를 대신 만들어 준다. 생성 패턴 전체는 생성 패턴.