빌더 패턴에 대해 알아보자
복잡한 객체를 완성도 있게 만드는 빌더 패턴 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 객체가 완성된 객체임을 알 수 있다.
결론
빌더 패턴은
- 생성 자체가 복잡한 경우
- 필수/선택 속성이 나눠져 있는 경우
- 객체가 완성된 건지 궁금한 경우
에 사용하면 좋다.