빌더 패턴이란? Node.js와 함께 배우는 구현과 활용법

2025. 2. 13. 19:05Tech Insights/Design Pattern

반응형

빌더 패턴이란?

빌더 패턴(Builder Pattern)은 복잡한 객체의 생성 과정과 표현 방법을 분리해 유연하게 객체를 구성할 수 있는 생성 패턴입니다. 이 패턴은 유연한 구성, 가독성 향상, 중복 감소 등의 이점을 제공합니다.


빌더 패턴의 특징

  • 단계별 구성: 메서드 체이닝으로 직관적인 객체 생성 가능
  • 유연성 확보: 선택적 속성을 자유롭게 추가
  • 가독성 향상: 복잡한 생성자보다 명확한 코드 작성

빌더 패턴이 사용되는 경우와 이점

매개변수가 많은 객체 선택적 속성 처리 및 명확한 구성 가능
반복적인 유사 객체 생성 동일한 빌더 재사용으로 코드 중복 감소
복잡한 객체 구성 단계별 설정으로 가독성과 관리성 향상

 


빌더 패턴 구현 방법 (Node.js 예제)

class ConfigBuilder {
  private host!: string;
  private port!: number;
  private dbUrl!: string;
  private enableLogging!: boolean;

  setHost(host: string): this {
    this.host = host; return this;
  }
  setPort(port: number): this {
    this.port = port; return this;
  }
  setDatabaseUrl(url: string): this {
    this.dbUrl = url; return this;
  }
  enableLogging(enable: boolean): this {
    this.enableLogging = enable; return this;
  }
  build(): Config {
    return new Config(this.host, this.port, this.dbUrl, this.enableLogging);
  }
}
const config = new ConfigBuilder()
  .setHost('localhost')
  .setPort(3000)
  .setDatabaseUrl('mongodb://localhost/dev')
  .enableLogging(true)
  .build();

문제점 및 해결방법

  • 코드 복잡성: 설정 메서드가 많아지면 코드가 길어짐
    예시: 여러 메서드를 호출해야 하여 코드가 복잡해질 수 있음:
const user = new UserBuilder()
	.setName('Henry')
    .setAge(30)
    .setEmail('henry@example.com')
    .build();
  • 간단한 객체에 오버헤드: 간단한 속성만 필요한 객체에 불필요한 빌더 코드가 추가됨:
const simpleUser = new UserBuilder().setName('Alice').build();

 

해결방법:

  • 간단한 객체는 생성자 사용: 3~4개 이하 속성은 생성자로 충분
  • 복잡한 객체만 빌더 적용: 유연성과 확장성이 필요한 경우만 사용
  • 혼합 패턴 사용: 필수 속성은 생성자, 선택 속성은 빌더로 구성:
class User {
  constructor(public name: string, public email: string) {}
}
class UserBuilder {
  private user: User;
  private age?: number;
  constructor(name: string, email: string) {
    this.user = new User(name, email);
  }
  setAge(age: number): this { this.age = age; return this; }
  build() { return { user: this.user, age: this.age }; }
}
const user = new UserBuilder('Henry', 'henry@example.com')
  .setAge(30)
  .build();

결론:  빌더 패턴은 언제 사용해야 할까?

  • 매개변수가 많고 선택적 속성이 있는 경우: 생성자보다 빌더가 유연성 제공
  • 유사한 객체를 반복적으로 생성할 때: 빌더를 재사용해 중복 코드 감소
  • 복잡한 객체 구성이 필요한 경우: 단계별 설정으로 가독성과 관리성 확보
  • 다양한 구성 옵션이 필요한 객체: 환경 설정, API 요청 등의 구성에 적합

빌더 패턴은 복잡한 객체 생성에는 적합하지만, 간단한 객체에는 오버 엔지니어링으로 보일 수있습니다.
빌더 패턴을 실제로 사용할 때, 적합도와 생성자와 함꼐 사용하는 것을 고려해볼 수 있습니다.

반응형