빌더 패턴(Builder Pattern) ?
디자인패턴중 하나로 객체를 생성하는 것에 관한 것이다
객체를 만들어 사용하다보면 객체 생성자의 인자들이 많아져 복잡해지는 경우가 생기는데 빌더 패턴을 이용하여 간단 명료하게 작성할 수 있다
객체 생성시 생성자 안에 넣을 필수적으로 필요한 인자들을 명확하게 구별할 수 있고 수많은 인자들을 전달해야 하는 상황에서 어떤 위치에 어떤 타입의 데이터가 들어가야 되는지 명시적으로 제시할 수 있다
빌더 패턴을 이용하여 가독성을 높일 수 있다
빌더 패턴을 이용하여 객체의 Immutability를 유지 할 수 있다
빌더 패턴의 단점은 코드가 길어질 수 있다
역시 코드를 보면서 이해하는게 빠르다. 아래의 코드를 보자
/* main.js */
const game = new Game(10,5,7,9)
누가 봐도 가독성이 떨어지는걸 알 수가 있다. 인자 4개만해도 저런데 인자가 더 많아지면 당연히 가독성은 더 떨어질 것이다. 이럴 때 사용하는 것이 빌더 패턴이다.
/* main.js */
const game = new GameBuilder()
.setTimeStart(7)
.setPumpkinCount(3)
.setGhostCount(5)
.setStrawberryCount(10)
.build();
/* fruit.js */
export default class GameBuilder {
setTimeStart(timeStart) {
this.timeStart = timeStart;
return this;
}
setPumpkinCount(pumpkinCount) {
this.pumpkinCount = pumpkinCount;
return this;
}
setGhostCount(ghostCount) {
this.ghostCount = ghostCount;
return this;
}
setStrawberryCount(strawberryCount) {
this.strawberryCount = strawberryCount;
return this;
}
build() {
return new Game(
this.timeStart,
this.pumpkinCount,
this.ghostCount,
this.strawberryCount
);
}
}
this를 이용하여 클래스 자체를 리턴한 이유?
클래스를 리턴 안하게 되면 나중에 객체 생성하고 메서드 불러올 때
const builder = new GameBuilder();
builder.setTimeStart(10)
builder.setPumpkinCount(5)
builder.setGhostCount(7)
builder.setStrawberryCount(9)
builder.build()
처럼 반복해서 작성해야하지만 클래스 자체를 리턴하게 되면 builder를 생략해서 코드를 보다 간결하게 작성할 수 있다. (필수사항은 아님)
😍 코드 지적은 언제나 환영입니다. 읽어주셔서 감사합니다. 😍