Builder Pattern

Seung·2022년 2월 27일
0

😄 빌더 패턴(Builder Pattern) ?

  • 디자인패턴중 하나로 객체를 생성하는 것에 관한 것이다

  • 객체를 만들어 사용하다보면 객체 생성자의 인자들이 많아져 복잡해지는 경우가 생기는데 빌더 패턴을 이용하여 간단 명료하게 작성할 수 있다

  • 객체 생성시 생성자 안에 넣을 필수적으로 필요한 인자들을 명확하게 구별할 수 있고 수많은 인자들을 전달해야 하는 상황에서 어떤 위치에 어떤 타입의 데이터가 들어가야 되는지 명시적으로 제시할 수 있다

  • 빌더 패턴을 이용하여 가독성을 높일 수 있다

  • 빌더 패턴을 이용하여 객체의 Immutability를 유지 할 수 있다

  • 빌더 패턴의 단점은 코드가 길어질 수 있다

역시 코드를 보면서 이해하는게 빠르다. 아래의 코드를 보자


😄 code 1.

/* main.js */
const game = new Game(10,5,7,9)
  • 위의 코드를 살펴보면 생성자에는 4개의 인자가 들어간다. 인자는 차례대로 타이머 시작 시간, 유령 개수, 호박 개수, 딸기 개수를 의미하며 인자 위치가 바뀌어서는 안된다. (유령 개수를 20개로 지정했는데 위치가 바뀌면 그 위치에 있는 것이 20개가 되므로)

누가 봐도 가독성이 떨어지는걸 알 수가 있다. 인자 4개만해도 저런데 인자가 더 많아지면 당연히 가독성은 더 떨어질 것이다. 이럴 때 사용하는 것이 빌더 패턴이다.


😄 code 2.

/* 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는 클래스 자체를 가르킨다. 즉 위의 코드에서는 GameBuilder를 가르킨다

this를 이용하여 클래스 자체를 리턴한 이유?
클래스를 리턴 안하게 되면 나중에 객체 생성하고 메서드 불러올 때
const builder = new GameBuilder();
builder.setTimeStart(10)
builder.setPumpkinCount(5)
builder.setGhostCount(7)
builder.setStrawberryCount(9)
builder.build()
처럼 반복해서 작성해야하지만 클래스 자체를 리턴하게 되면 builder를 생략해서 코드를 보다 간결하게 작성할 수 있다. (필수사항은 아님)


😍 코드 지적은 언제나 환영입니다. 읽어주셔서 감사합니다. 😍

profile
지적은 제 발전의 원동력입니다. 사소한 것이라도 지적해주세요 :)

0개의 댓글