
(컨텐츠쪽, V사에서 실제로 선호하던 방식)
빌더 패턴은 복잡한 객체의 생성 과정과 표현 방법을 분리하여, 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 생성 패턴. (트리 조립 기법이다.)
1. 점진적 생성자 패턴 User(1, "John", "Doe", 25, "Seoul", "010-...", true, ...)
2. 불변성 확보 (객체 생성 후 값을 바꿀 수 없게 (setter제거)) 만들고 싶을 때. 빌더가 모든 조립을 마친 뒤 마지막에 build()를 호출할 때만 진짜 객체를 생성하기 때문)
3. 선택적 매개변수의 유연한 처리 (필수값과 선택값이 혼재 되었을때 오버로딩 필요 없음)
| 역할 | 설명 |
|---|---|
| Product | 우리가 최종적으로 만들 복잡한 객체입니다. |
| Builder | Product를 구성하는 부품들을 만드는 추상 인터페이스입니다. |
| ConcreteBuilder | Builder의 구현체로, 실제 부품을 조립하고 결과를 반환합니다. |
| Director | (선택 사항) 어떤 순서로 부품을 만들지 결정하는 '설계자' 역할을 합니다. |
참고: 최근 Java나 Kotlin 등 실무에서 사용하는 빌더 패턴은 Director를 생략하고, 대신 **메서드 체이닝(Fluent Interface)**을 결합하여 사용하는 것이 일반적.
this를 넘겨서 체이닝을 가능하게 하자"는 표현 기술입니다.// 일반적인 빌더
UserBuilder builder;
builder.setName("Gemini");
builder.setLevel(99);
User user = builder.build();
// 플루언트 빌더
User user = UserBuilder()
.setName("Gemini") // return *this;
.setLevel(99) // return *this;
.build();
즉, 빌더패턴 위에 플루언트 인터페이스라는 인터페이스 스타일을 입힌 것.