빌더 패턴에 대해 알아보자

복잡한 객체를 완성도 있게 만드는 빌더 패턴 by ZeroCho

2024-10-22 · 3분 · 조회 1

@ZeroChoTV님의 복잡한 객체를 완성도 있게 만드는 빌더 패턴 를 보고 정리한 내용입니다.

빌더 패턴이란?

복잡한 객체를 만들 때 사용하면 좋은 패턴이다.

class Person {
  constructor(name, age, address) {
    // name은 필수, age와 address는 선택
    if (!name) {
      throw new Error('이름은 필수입니다.');
    }
    this.name = name;
    this.age = age;
    this.address = address;
  }
 
  setAge(age) {
    this.age = age;
  }
 
  setAddress(address) {
    this.address = address;
  }
}
 
const person = new Person('zero');
// !!주의 > 이 단계에서 완성된 Person 객체인지 판단하기 어려움
 
// 나중에 객체를 완성시킨다.
person.setAge(30);
person.setAddress('Seoul');

위와 같이 객체를 만들 때, 필수 속성과 선택 속성이 섞여 있으면 객체가 완성된 건지 판단하기 어렵다.

이런 문제점을 해결하기 위해 빌더 패턴을 사용할 수 있다.

빌더 패턴 적용하기

class Person {
  constructor(builder) {
    this.name = builder.name;
    this.age = builder.age;
    this.address = builder.address;
  }
 
  static Builder(name) {
    return new PersonBuilder(name);
  }
}
 
class PersonBuilder {
  // 필수 속성은 생성자로 추가한다.
  constructor(name) {
    if (!name) {
      throw new Error('이름은 필수입니다.');
    }
    this.name = name;
  }
 
  // 선택적인 속성들은 setter 메서드로 추가한다.
  setAge(age) {
    this.age = age;
    return this;
  }
 
  setAddress(address) {
    this.address = address;
    return this;
  }
 
  // 최종적으로 Person 객체를 생성한다.
  build() {
    return new Person(this);
  }
}
 
Person.Builder('zero').setAge(30).build();
// Person { name: 'zero', age: 30, address: undefined }
  • build() 메서드를 통해 완성했기 때문에 Person 객체가 완성된 객체임을 알 수 있다.

결론

빌더 패턴은

  • 생성 자체가 복잡한 경우
  • 필수/선택 속성이 나눠져 있는 경우
  • 객체가 완성된 건지 궁금한 경우

에 사용하면 좋다.

Home
Posts
Notes