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 패턴 사용 시 고려할 점 ⚠️

  1. 장점:
    • 복잡한 객체 생성 로직을 분리하여 코드 가독성 향상.
    • 동일한 생성 로직을 사용하여 다양한 객체를 생성 가능.
  2. 단점:
    • 클래스가 많아져 구조가 복잡해질 수 있음.
    • 단순한 객체 생성에는 오히려 과도한 설계가 될 수 있음.
  3. 유의점:
    • Director의 사용은 선택 사항입니다. 필요에 따라 Builder만으로 객체를 생성할 수 있습니다.

5. Builder 패턴 요약 🏁

Builder 패턴은 복잡한 객체 생성 과정을 단순화하고, 코드의 재사용성과 유지 보수성을 높이는 데 큰 도움을 줍니다. 특히 Unity3D 같은 프레임워크에서 다양한 요소를 조합하여 객체를 생성해야 할 때 강력한 도구가 됩니다. 하지만 모든 상황에서 적합한 것은 아니므로, 사용 시 목적과 필요성을 잘 판단해야 합니다.


6. Builder 패턴 참고 자료 🔗

반응형

+ Recent posts