Unity/Design Pattern

Unity로 이해하는 팩토리 패턴 (Factory Pattern)

코샵 2023. 8. 7. 10:55
반응형

팩토리 패턴

팩토리 패턴은 슈퍼클래스에서 객체를 생성하기 위한 인터페이스를 제공하지만 서브클래스가 생성될 객체의 유형을 변경할 수 있도록 허용하는 생성 디자인 패턴입니다. 기본적으로 팩토리 클래스를 사용하여 개체 인스턴스를 생성함으로써 개체 생성 프로세스를 추상화합니다.

제품 생성 프로세스가 정의된 조립 라인으로 생각하면 정확한 제품이 필요에 따라 변경될 수 있습니다.

Unity에서 팩토리 패턴 구현

공장 패턴의 작동 방식을 이해하려면 각기 다른 클래스로 표시되는 고블린, 좀비, 뱀파이어 등 다양한 유형의 적을 생성할 수 있는 게임을 상상해 보세요. 각 클래스의 인스턴스를 직접 만드는 대신 팩토리 클래스를 사용하여 이를 수행합니다.

다음은 Enemy 클래스의 초기 구조입니다.

csharpCopy code
public abstract class Enemy
{
    public abstract void Attack();
}

public class Goblin : Enemy
{
    public override void Attack()
    {
        Debug.Log("Goblin attacks!");
    }
}

public class Zombie : Enemy
{
    public override void Attack()
    {
        Debug.Log("Zombie attacks!");
    }
}

public class Vampire : Enemy
{
    public override void Attack()
    {
        Debug.Log("Vampire attacks!");
    }
}

각 적 유형은 'Enemy'의 하위 클래스이며 고유한 'Attack' 메서드가 있습니다. 이제 EnemyFactory 클래스를 만듭니다.

csharpCopy code
public class EnemyFactory
{
    public enum EnemyType
    {
        Goblin,
        Zombie,
        Vampire
    }

    public Enemy CreateEnemy(EnemyType type)
    {
        switch (type)
        {
            case EnemyType.Goblin:
                return new Goblin();
            case EnemyType.Zombie:
                return new Zombie();
            case EnemyType.Vampire:
                return new Vampire();
            default:
                throw new ArgumentException("Invalid enemy type", "type");
        }
    }
}

이 EnemyFactory 클래스는 EnemyType 열거형을 사용하여 해당 Enemy 하위 클래스를 생성합니다.

적을 생성하려면 EnemyFactory를 사용합니다.

csharpCopy code
public class Test : MonoBehaviour
{
    void Start()
    {
        EnemyFactory factory = new EnemyFactory();

        Enemy enemy = factory.CreateEnemy(EnemyFactory.EnemyType.Goblin);
        enemy.Attack();
    }
}

이 예에서는 공장을 사용하여 고블린을 생성했습니다. 팩토리 패턴을 적용하여 서로 다른 Enemy 하위 클래스를 생성하는 프로세스를 간소화하여 코드를 깨끗하고 조직적이며 유연하게 유지했습니다.

결론

팩터리 패턴은 유지 관리 및 재사용이 가능한 코드를 생성하기 위한 핵심 자산으로, 게임 개발 프로세스에서 더 많은 유연성과 적은 결합을 허용합니다. 이 패턴은 게임과 다양한 게임 개체가 커짐에 따라 복잡성을 관리하는 데 특히 유용합니다.