개념
복잡한 객체의 생성 과정과 최종 표현을 분리하여, 동일한 생성 절차로 다양한 형태의 객체를 만들 수 있게 하는 설계 패턴입니다.
구성 요소
- Builder: 객체의 각 부분을 생성하는 추상 인터페이스
- ConcreteBuilder: Builder를 구현하여 실제 부품 조립 로직 처리
- Director: Builder를 활용해 객체 생성 순서와 과정 관리
- Product: 최종적으로 생성되는 복합 객체
Unity 구현 예시
최종 생성물 - Hero 클래스
using UnityEngine;
public class Hero
{
public string Name { get; set; }
public string Armor { get; set; }
public string Weapon { get; set; }
public string Skill { get; set; }
public void DisplayInfo()
{
Debug.Log($"[{Name}] 장비: {Armor}, 무기: {Weapon}, 스킬: {Skill}");
}
}추상 빌더
public abstract class HeroFabricator
{
protected Hero hero;
public abstract void ForgeName();
public abstract void ForgeArmor();
public abstract void ForgeWeapon();
public abstract void ForgeSkill();
public Hero DeliverHero()
{
return hero;
}
}구체 빌더 - 전사 생성
using UnityEngine;
public class WarriorFabricator : HeroFabricator
{
public WarriorFabricator()
{
hero = new Hero();
}
public override void ForgeName()
{
hero.Name = "붉은 전사";
}
public override void ForgeArmor()
{
hero.Armor = "플레이트 아머";
Debug.Log("중갑을 제작합니다.");
}
public override void ForgeWeapon()
{
hero.Weapon = "대검";
Debug.Log("양손 대검을 제작합니다.");
}
public override void ForgeSkill()
{
hero.Skill = "광폭화";
Debug.Log("근접 전투 스킬을 습득합니다.");
}
}감독자 - 조립 순서 관리
using UnityEngine;
public class HeroForgeMaster
{
public void Manufacture(HeroFabricator fabricator)
{
Debug.Log("=== 영웅 단조 시작 ===");
fabricator.ForgeName();
fabricator.ForgeArmor();
fabricator.ForgeWeapon();
fabricator.ForgeSkill();
Debug.Log("=== 단조 완료 ===");
}
}클라이언트 실행
using UnityEngine;
public class HeroSpawnManager : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.H))
{
SpawnWarrior();
}
}
void SpawnWarrior()
{
HeroFabricator fabricator = new WarriorFabricator();
HeroForgeMaster master = new HeroForgeMaster();
master.Manufacture(fabricator);
Hero completedHero = fabricator.DeliverHero();
completedHero.DisplayInfo();
}
}확장 - 마법사 빌더 추가
using UnityEngine;
public class MageFabricator : HeroFabricator
{
public MageFabricator()
{
hero = new Hero();
}
public override void ForgeName()
{
hero.Name = "신비의 마법사";
}
public override void ForgeArmor()
{
hero.Armor = "로브";
Debug.Log("마법 로브를 제작합니다.");
}
public override void ForgeWeapon()
{
hero.Weapon = "마법 지팡이";
Debug.Log("원소 지팡이를 제작합니다.");
}
public override void ForgeSkill()
{
hero.Skill = "隕石 낙하";
Debug.Log("파괴 마법을 습득합니다.");
}
}활용 장점
- 복잡한 객체의 생성 단계를 체계적으로 분리
- 같은 조립 과정으로 서로 다른 캐릭터 유형 생성 가능
- 새로운 캐릭터 타입 추가 시 기존 코드 수정 없이 빌더만 확장
- Unity 에디터에서 ScriptableObject와 결합해 데이터 기반 설계에 활용