본문 바로가기
CS/디자인패턴

[CS : 디자인패턴] 빌더(Builder)패턴

by 왹져박사 2023. 4. 28.
728x90

 

생성 패턴의 한 종류인 빌더(Builder)패턴현재 진행중인 프로젝트에서 UI상의 Stage를 배치하는 과정에서 처음엔 동적으로 데이터를 가져와서 붙이는 것이 좋겠다는 생각을 하였다. 또한 동적으로 붙이기 위한 요소들을 hierachy창이 아닌 script에서 관리하는 것이 편할 것이라 생각하여 관련된 패턴을 chatGPT에게 물어보았다. (요즘 chatGPT와 하루에 최소 1번은 대화하는 듯 하다. 개발부터 일상 계획들까지) 그렇게 Builder 패턴에 대하여 공부하게 되었다. 

 

빌더(Builder)패턴

설계에서 생성 과정을 분리하여 단계적으로 유연하게 객체를 생성할 수 있도록 함

 

1. 객체 생성 과정 단순화

2. 코드의 가독성 ↑

2. 유지보수성 향상

 

하지만, 객체 생성 과정이 단순한 경우 오히려 코드만 복잡해진다는 단점

 

chatGPT가 보여준 예제

public class UIElementBuilder {
   private GameObject _uiElement;

   public UIElementBuilder() {
      _uiElement = new GameObject();
   }

   public UIElementBuilder SetPosition(Vector2 position) {
      _uiElement.transform.position = position;
      return this;
   }

   public UIElementBuilder SetSize(Vector2 size) {
      _uiElement.GetComponent<RectTransform>().sizeDelta = size;
      return this;
   }

   public UIElementBuilder SetColor(Color color) {
      _uiElement.GetComponent<Image>().color = color;
      return this;
   }

   public GameObject Build() {
      return _uiElement;
   }
}

위 코드로 어떠한 빌더패턴이 어떠한 방식으로 구성되고 작동하는지 이해하고,

데이터테이블과 추상팩토리 패턴과 연계하기 위해 본 프로젝트에 직접 작성하고 배우며 만들어나갔다. 

 

처음에 기능만 빠르게 구현하려 했던 코드와 비교하면 너무 예쁜 코드가 되었다..!

디자인 패턴 공부하고 어떻게 바꿔나갈지 설계하고 적용하는 과정이 지금까지 개발 과정중에 가장 재미있다고 느꼈다.

chatGPT에게 작성한 코드를 보여주며 고쳐나가기도 했다.

 

chatGPT와 대화할수록 항상 개념과 사실을 공부하기엔 좋지만, 내가 의도하고 바라는 방향으로 유도하는것이 조금 힘들었다. 하지만 그렇게 대화하면서 나 자신의 의도를 명확하게 파악할 수 있었고 그에 따라 나만의 패턴으로 만들어나갈 수 있었다. 이런 부분이 굉장한 장점인듯 하다.

 

항상 다른 사람에게 기획이나 구조를 설명하려고 하면 상대와 나의 이해가 다를 수 있다.

이 이해의 차이를 최대한 좁히기 위하여 chatGPT와 대화하는 것을 통해 나의 머리속의 의도를 구체화시키는것이 도움이 될 듯 하다. 

 

그렇게 본 프로젝트에 추상팩토리(Abstract Factory) 패턴과 빌더패턴을 사용하였다. 

StageData를 로드하여 UIStage에서 Cell들을 빌드하는 빌더를 만들었다. 

 

2023.05.01 - [Project/ 꿈의 왕국 : 영원한 보금자리] - [PJ] UIStage 데이터테이블 연동, 추상팩토리와 빌더 패턴

 

[PJ] UIStage 데이터테이블 연동, 추상팩토리와 빌더 패턴

R&D하고 본 프로젝트에 적용하기 위해 패턴을 공부하였다. 들어가는 요소들을 데이터로 받아오거나 조절해야 하는 부분들이 많았는데, 직접 붙였던 부분을 개선하고 싶었다. chatGPT에게 내 상황

narmhye.tistory.com

 

 

 

728x90