Search

빌더 패턴

class
디자인 패턴
상태
완료
날짜
목차

빌더 패턴

빌더 패턴(Builder Pattern)은 복잡한 객체의 생성과정을 단계별로 분리하여 구현하는 방식을 말합니다.
이 패턴은 특히 객체의 구성이 복잡하거나 구성 과정에 여러 단계가 필요할 때 유용하게 사용됩니다.

빌더 패턴의 장,단점

장점

생성 과정의 재사용성 : 같은 생성 과정을 사용하여 다양한 표현을 생성할 수 있습니다.
코드의 가독성 향상 : 생성 과정을 단계별로 나누어 코드의 가독성을 향상시킵니다.
객체 생성 과정의 유연성 : 필요에 따라 객체 생성 과정을 더 유연하게 조절할 수 있습니다.

단점

구조의 복잡성 증가 : 추가 클래스와 인터페이스가 필요하므로 전체 구조가 복잡해질 수 있습니다.
성능 저하 : 간단한 객체에 대해 빌더 패턴을 사용할 경우, 필요 이상의 오버헤드가 발생할 수 있습니다.

빌더 패턴의 단점에 대한 구체적인 예시

간단한 게임 오브젝트를 생성하는 경우를 생각해 보겠습니다.
간단한 객체에 빌더 패턴을 적용하는 것은 과도한 복잡성을 초래할 수 있습니다.
간단한 객체 생성 예시 (빌더 패턴 적용 전)
using UnityEngine; public class SimpleItem : MonoBehaviour { public string itemName; public int itemID; public Sprite itemIcon; public SimpleItem(string name, int id, Sprite icon) { itemName = name; itemID = id; itemIcon = icon; } }
C#
복사
빌더 패턴 적용 후
public interface IItemBuilder { void BuildItemName(string name); void BuildItemID(int id); void BuildItemIcon(Sprite icon); SimpleItem GetItem(); } public class SimpleItemBuilder : IItemBuilder { private SimpleItem _item = new SimpleItem(); public void BuildItemName(string name) { _item.itemName = name; } public void BuildItemID(int id) { _item.itemID = id; } public void BuildItemIcon(Sprite icon) { _item.itemIcon = icon; } public SimpleItem GetItem() { return _item; } } public class Director { public SimpleItem Construct(IItemBuilder builder, string name, int id, Sprite icon) { builder.BuildItemName(name); builder.BuildItemID(id); builder.BuildItemIcon(icon); return builder.GetItem(); } }
C#
복사
이 경우, SimpleItem 클래스의 인스턴스를 생성하기 위해 SimpleItemBuilder 클래스와 Director 클래스가 추가로 필요합니다. 이는 다음과 같은 문제점을 야기할 수 있습니다:
오버헤드 증가 : 간단한 객체의 생성을 위해 여러 단계와 클래스를 거치는 것은 불필요한 오버헤드를 발생시킵니다.
복잡성 증가 : 코드의 복잡성이 불필요하게 증가하며, 단순한 작업을 위해 더 많은 코드를 작성하고 관리해야 합니다.
유지 보수의 어려움 : 추가적인 클래스와 인터페이스는 유지 보수를 더 복잡하게 만듭니다.

빌더 패턴의 구조

1.
Builder (인터페이스 또는 추상 클래스) : 캐릭터의 각 부분을 구축하기 위한 메소드를 정의합니다.
2.
Concrete Builder : Builder 인터페이스를 구현하여 실제 캐릭터의 생성 로직을 담당합니다.
3.
Director : Builder를 사용하여 캐릭터를 순서대로 구축합니다.
4.
Product : 최종적으로 생성될 캐릭터 객체입니다.

빌더 패턴의 UML

아래는 빌더 패턴 UML입니다.

빌더 패턴의 구현

Builder 인터페이스

Builder 인터페이스는 생성할 객체의 각 부분을 구축하기 위한 메소드를 정의합니다.
이 인터페이스는 생성할 객체(Character)의 각 요소(예: 무기, 갑옷, 능력)를 구축하기 위한 메소드를 선언합니다.
public interface ICharacterBuilder { void BuildWeapon(string weaponType); void BuildArmor(string armorType); void BuildAbilities(string[] abilities); Character GetResult(); }
C#
복사

Concrete Builder

Concrete BuilderBuilder 인터페이스를 구현하는 클래스입니다.
이 클래스는 실제 Character 객체의 생성 로직을 담당합니다. 여기서는 HeroBuilderConcrete Builder 역할을 합니다.
public class HeroBuilder : ICharacterBuilder { private Character character = new Character(); public void BuildWeapon(string weaponType) { character.Weapon = weaponType; } public void BuildArmor(string armorType) { character.Armor = armorType; } public void BuildAbilities(string[] abilities) { character.Abilities = abilities; } public Character GetResult() { return character; } }
C#
복사

Director

Director 클래스는 빌더를 사용하여 객체를 순서대로 구축하는 역할을 합니다.
Director는 특정 순서대로 빌더의 메소드를 호출하여 객체를 구축합니다. CharacterDirector가 이 역할을 담당합니다.
public class CharacterDirector { public Character Construct(ICharacterBuilder builder) { builder.BuildWeapon("Sword"); builder.BuildArmor("Chainmail"); builder.BuildAbilities(new string[] { "Attack", "Defend" }); return builder.GetResult(); } }
C#
복사

Product

Product는 빌더 패턴을 통해 생성될 최종 객체입니다.
이 예시에서는 Character 클래스가 Product 역할을 합니다. Character 클래스는 다양한 속성과 메소드를 가질 수 있습니다.
public class Character { public string Weapon { get; set; } public string Armor { get; set; } public string[] Abilities { get; set; } // Additional character methods... }
C#
복사