image.png

(컨텐츠쪽, V사에서 실제로 선호하던 방식)

빌더 패턴(Builder Pattern)

빌더 패턴은 복잡한 객체의 생성 과정과 표현 방법을 분리하여, 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 생성 패턴. (트리 조립 기법이다.)

전통적인 생성자 방식의 고질적인 문제

1. 점진적 생성자 패턴 User(1, "John", "Doe", 25, "Seoul", "010-...", true, ...)

2. 불변성 확보 (객체 생성 후 값을 바꿀 수 없게 (setter제거)) 만들고 싶을 때. 빌더가 모든 조립을 마친 뒤 마지막에 build()를 호출할 때만 진짜 객체를 생성하기 때문)

3. 선택적 매개변수의 유연한 처리 (필수값과 선택값이 혼재 되었을때 오버로딩 필요 없음)

빌더 패턴의 구성 요소

역할 설명
Product 우리가 최종적으로 만들 복잡한 객체입니다.
Builder Product를 구성하는 부품들을 만드는 추상 인터페이스입니다.
ConcreteBuilder Builder의 구현체로, 실제 부품을 조립하고 결과를 반환합니다.
Director (선택 사항) 어떤 순서로 부품을 만들지 결정하는 '설계자' 역할을 합니다.

참고: 최근 Java나 Kotlin 등 실무에서 사용하는 빌더 패턴은 Director를 생략하고, 대신 **메서드 체이닝(Fluent Interface)**을 결합하여 사용하는 것이 일반적.

빌더패턴과 플루언트 빌더 패턴

// 일반적인 빌더 
UserBuilder builder;
builder.setName("Gemini");
builder.setLevel(99);
User user = builder.build();

// 플루언트 빌더
User user = UserBuilder()
    .setName("Gemini") // return *this;
    .setLevel(99)     // return *this;
    .build();

즉, 빌더패턴 위에 플루언트 인터페이스라는 인터페이스 스타일을 입힌 것.