게임 개발/디자인 패턴

[디자인패턴]01. 빌더패턴(builder pattern)

Heesuk Lee 2019. 2. 24. 16:56

빌더 패턴 위키백과: https://ko.wikipedia.org/wiki/%EB%B9%8C%EB%8D%94_%ED%8C%A8%ED%84%B4


1. 빌더패턴


빌더패턴이란 복합객체의 생성과정과 표현방법을 분리하여 동일한 생성절차에서 서로 다른 표현 결과를 만들 수 있게하는 패턴이다.


즉, 어떠한 복합적인 정보를 지녀야할 객체를 생성하는 과정과 각기다른 정보를 표현하여 보여주는것을 분리하여 

비슷한 형태를 가졌지만 서로 각기 다른것들을 표현하는 객체를 생성하는 패턴이라고 정리했습니다.






경험적인 예시로 팝업창이 있었습니다.




다른표현을 하지만 형태는 비슷한 이런 팝업창이 그 예시가 되지않을까 생각핬습니다.



호출되는 형식은 아래와 같이 두종류가 될것입니다.

// 메소드체이닝을 하지않은 형태

const builder = new PopupBuilder()

builder.setA(infoA);

builder.setB(infoB);

builder.setC(infoC);

builder.build();

// 메소드 체이닝을 한 상태

const builder = new PopupBuilder().setA(infoA).setB(infoB).setC(infoC).build();



**메소드 체이닝(method chaining)이란**

어떤 클래스의 매소드가 자기자신 즉 객체(this)를 반환하게되면 반환된 그객체를 통해 클래스내에 다른 매소드를 호출할수있는 방식입니다.

이러한 프로그래밍 패턴을 매소드체이닝이라고 부릅니다. 더 자세한것은 따로 정리하도록 하겠습니다.




다음은 빌더패턴의 형태를 살펴보겠습니다.


// 빌더의 클래스 형태

class PopupBuilder {


// 생성될 객체에 넣어줄 정보들 프로퍼티

        private A = null;
        private B = null;
        private C = null;


public builer() {

// 여기서 최종적으로 받아온 정보를 바탕으로 객체를 생성합니다.

const node: cc.Node = cc.instantiate(prefab);

const popup: Popup = node.getComponent(Popup);

// 생성될 객체에 저장된 정보들을 초기화해줍니다.

popup.setA();

popup.setB();

popup.setC();

}


public setA(infoA) {

// 받아온 infoA를 popupBuilder의 프로퍼티로 저장합니다.

this.A = infoA;

}

public setB(infoB) {

                // 받아온 infoB를 popupBuilder의 프로퍼티로 저장합니다.

this.B = infoB;

public setC(infoC) {

                // 받아온 infoC를 popupBuilder의 프로퍼티로 저장합니다.

this.C = infoC;

}

}



// 생성될 객체클래스

class popup {

// 우리가 보게될 부분
@property(cc.Label)

aLabel: cc.Label = null;

@property(cc.Label)

bLabel: cc.Label = null;

@property(cc.Label)

cLabel: cc.Label = null;


// 이 생셩될 객체클래스에서는 받아온 정보를 바탕으로 보여지는 부분만을 담당합니다.

public setA(infoA) {

this.aLabel.string = infoA;

}

public setB(infoB) {

this.bLabel.string = infoB;

public setC(infoC) {

this.cLabel.string = infoC;

}

}


생략되고 제가 사용한 편의에 맞춰서 변형이 되었을 수도 있지만 기억해야할것은 두가지인것 같습니다.


첫째 builder가 받아올 모든 정보를 기억하는 것, 그리고

둘째는 build()하는 순간에 객체를 생성과 동시에 모든 정보를 한번에 표현한다는 것이 포인트라고 생각합니다.


여기까지가 제가 이해한 빌더패턴이며, 좀더 확장되거나 추가했어야하는 정보가있으면 다시 추가해보려고합니다.ㅎㅎ


반응형