디자인 패턴/생성

빌더 패턴

sdafdq 2022. 10. 12. 20:23

빌더 패턴은 생성에 관련된 패턴이다.

우리가 클래스를 만들다 보면 상당히 많은 멤버변수들이 있다.

이름, 나이, 전화번호 등등

 

이러다보면 이 클래스를 생성(객체)할 때 생성자의 멤버변수의 위치 등 고려해야 할 사항이 많다.

 

그런데 이걸 내부 클래스나 이런 걸로 빌더로 정의해두면 정말 쉽다.

 

빌더는 음.. 일종의 임시 클래스라고 생각하면 좋을 것 같다.

 

어떤 클래스의 빌더는 그 클래스의 똑같은 멤버변수를 가지고 있는거다 (그렇다고 해서 그 클래스를 상속받는게 아니다. 다른 클래스다.)

 

상수로 사용하고 싶은 것은 생성자를 이용해 받아야 겠지만, 나머지는 기본값을 넣어두고, 

 

setter를 이용해 받는 것이다.

 

단, setter지만 목적과 방법이 조금 다르므로 빌더의 경우는 그냥 멤버변수의 이름으로 한다.

GameObjectBuilder.Age(14) 등

이 때, 리턴은 GameObjectBuilder로 해준다.

 

그러면,

GameObjectBuilder

.Age(14)

.Hp(50)

.Mp(30)

 

이런 식으로 계속 GameObjectBuilder 객체를 이용할 수 있다.

확실히 가시성도 좋고, 필요하지 않은 것은 0이라던지 기본값으로 할 수 있다.

 

그리고 이렇게 모든 객체의 사항들을 빌드 했으면,

 

GameObjectBuilder

.Age(14)

.Hp(50)

.Mp(30)

.GetBuild();

 

GetBuild()

{

      return new GameObject(GameObjectBuilder gameObjectBuilder);

}

 

당연히 게임오브젝트 클래스의 생성자는 저 빌더를 받을 수 있게끔 정의해 놔야 한다.

GameObject(GameObjectBuilder gameObjectBuilder)

{

     this.age = gameObjectBuilder.age;

}

 

 

장점은 아무래도 객체생성의 타이밍을 정할 수 있고, 또 생성자의 인자 순서를 신경쓰지 않아도 되며, 또한 객체 생성부분과 객체 부분을 분리해 낼 수 있다.

 

 

실행방법

GameObject gameObj = new GameObject.Builder(final의 경우 생성자로 받을 수 있음).Age(14).~~~~.Build();

'디자인 패턴 > 생성' 카테고리의 다른 글

싱글톤  (0) 2022.11.11
원형(prototype) 패턴  (0) 2022.10.16
팩토리 메서드  (0) 2022.10.14
추상 팩토리  (0) 2022.10.07