1. Builder 패턴이란? 🛠️
Builder 패턴은 객체 생성 과정에서 복잡성을 줄이고, 유연성을 제공하는 디자인 패턴입니다. 특히 다양한 속성을 가진 객체를 생성해야 하거나, 동일한 생성 프로세스를 통해 여러 종류의 객체를 생성해야 할 때 유용합니다.
"객체를 생성하는 방식을 분리하여 코드의 가독성과 재사용성을 높이자!"

2. Builder 패턴의 구성 요소 ✨
Builder 패턴은 객체 생성 코드를 단계별로 분리하여, 클라이언트가 객체 생성 과정에 대해 더 큰 제어권을 갖도록 설계되었습니다. 핵심은 복잡한 객체의 생성 과정을 캡슐화하여 클라이언트와 분리하는 것입니다.
구성 요소:
- Builder: 객체 생성 단계를 정의하는 인터페이스.
- ConcreteBuilder: Builder를 구현하며, 생성 단계별 세부 구현을 담당.
- Director: 객체 생성 과정을 제어하며, Builder를 사용하여 최종 객체를 생성.
- Product: 최종적으로 생성되는 객체.
3. Builder 패턴 예제 🖥️
예제: 캐릭터 생성기 (Unity3D)
게임에서 플레이어 캐릭터를 생성할 때, 다양한 장비와 스탯을 가진 캐릭터를 만들어야 한다고 가정합니다.
// Product: 생성될 객체
public class Character {
public string Name { get; set; }
public string Weapon { get; set; }
public string Armor { get; set; }
public int Health { get; set; }
public override string ToString() {
return $"Character: {Name}, Weapon: {Weapon}, Armor: {Armor}, Health: {Health}";
}
}
// Builder: 생성 과정 인터페이스
public interface ICharacterBuilder {
void SetName(string name);
void SetWeapon(string weapon);
void SetArmor(string armor);
void SetHealth(int health);
Character GetCharacter();
}
// ConcreteBuilder: 구체적인 구현
public class WarriorBuilder : ICharacterBuilder {
private Character _character = new Character();
public void SetName(string name) {
_character.Name = name;
}
public void SetWeapon(string weapon) {
_character.Weapon = weapon;
}
public void SetArmor(string armor) {
_character.Armor = armor;
}
public void SetHealth(int health) {
_character.Health = health;
}
public Character GetCharacter() {
return _character;
}
}
// Director: 생성 제어
public class CharacterDirector {
private readonly ICharacterBuilder _builder;
public CharacterDirector(ICharacterBuilder builder) {
_builder = builder;
}
public Character Construct(string name, string weapon, string armor, int health) {
_builder.SetName(name);
_builder.SetWeapon(weapon);
_builder.SetArmor(armor);
_builder.SetHealth(health);
return _builder.GetCharacter();
}
}
// 사용 예
public class Example {
public static void Main(string[] args) {
ICharacterBuilder builder = new WarriorBuilder();
CharacterDirector director = new CharacterDirector(builder);
Character warrior = director.Construct("Warrior", "Sword", "Steel Armor", 100);
Console.WriteLine(warrior);
}
}
출력:
Character: Warrior, Weapon: Sword, Armor: Steel Armor, Health: 100
4. Builder 패턴 사용 시 고려할 점 ⚠️
- 장점:
- 복잡한 객체 생성 로직을 분리하여 코드 가독성 향상.
- 동일한 생성 로직을 사용하여 다양한 객체를 생성 가능.
- 단점:
- 클래스가 많아져 구조가 복잡해질 수 있음.
- 단순한 객체 생성에는 오히려 과도한 설계가 될 수 있음.
- 유의점:
- Director의 사용은 선택 사항입니다. 필요에 따라 Builder만으로 객체를 생성할 수 있습니다.
5. Builder 패턴 요약 🏁
Builder 패턴은 복잡한 객체 생성 과정을 단순화하고, 코드의 재사용성과 유지 보수성을 높이는 데 큰 도움을 줍니다. 특히 Unity3D 같은 프레임워크에서 다양한 요소를 조합하여 객체를 생성해야 할 때 강력한 도구가 됩니다. 하지만 모든 상황에서 적합한 것은 아니므로, 사용 시 목적과 필요성을 잘 판단해야 합니다.
6. Builder 패턴 참고 자료 🔗
반응형
'Workspace > Design Pattern' 카테고리의 다른 글
템플릿 메서드 패턴 (Template Method): 알고리즘 뼈대를 정의하는 패턴 (0) | 2025.01.22 |
---|---|
미디에이터 패턴 (Mediator Pattern): 객체 간의 복잡한 상호작용을 단순화하기 (0) | 2025.01.22 |
프록시 패턴 (Proxy Pattern): 스마트한 대리자 역할 (0) | 2025.01.22 |
커맨드 패턴 (Command Pattern): 행동을 캡슐화하다 (0) | 2025.01.22 |
어댑터 패턴 (Adapter Pattern): 호환되지 않는 인터페이스 연결하기 (0) | 2025.01.22 |