- 추상 팩토리(Abstract Factory)란?

 

추상 팩토리 게임 예시

 

RPG 게임을 예시로 들자면 각 스테이지 별로 등장하는 몬스터가 다르다고 하자

몬스터를 생성하는 곳한군데에 몰아넣고

이곳에 있는 팩토리 중 1개를 골라서 생성하는 것!

 

스테이지에 따라 몬스터를 관리하는 공장이 있고(팩토리1, 팩토리2...)

이러한 몬스터를 생성하는 공장들동시에 관리하는 게 추상 팩토리라고 생각하면 된다!

 


- 추상 팩토리 사용 예시(C#)

1. 먼저 몬스터 인터페이스를 정의한다

    // 몬스터 인터페이스
    interface IMonster
    {
        void Attack();	// 공격 정의
    }

2. 인터페이스를 상속받은 몬스터들을 만든다

    // 초원 스테이지에 등장하는 몬스터들
    class Slime : IMonster
    {
        public void Attack() => Console.WriteLine("슬라임의 점프 공격!");
    }

    // 동굴 스테이지에 등장하는 몬스터들
    class Goblin : IMonster
    {
        public void Attack() => Console.WriteLine("고블린이 단검을 던졌다!");
    }

    class Troll : IMonster
    {
        public void Attack() => Console.WriteLine("트롤이 격분했다!");
    }


3. 추상 팩토리 인터페이스를 정의한다

// 추상 팩토리
interface IStageFactory
{
    IMonster CreateMonster();
    IItem CreateItem();
}

4. 추상 팩토리를 상속받아 각 스테이지별 팩토리를 만든다

    // 초원 스테이지 팩토리
    class StageGrass_Factory : IStageFactory
    {
        public IMonster CreateMonster() => new Slime();
    }

    // 동굴 스테이지 팩토리
    class StageCave_Factory : IStageFactory
    {
        private Random random = new Random();
        public IMonster CreateMonster()
        {
            if (random.Next(2) == 0)
                return new Goblin();
            else
                return new Troll();
        }
    }

5. 만든 예시코드로 게임을 실행해본다

    // 게임 매니저
    class GameManager
    {
        private IMonster monster;

        public GameManager(IStageFactory factory)
        {
            monster = factory.CreateMonster();
        }

        public void Play()
        {
            monster.Attack();
        }
    }


    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("초원 스테이지 시작!");
            GameManager grassGame = new GameManager(new StageGrass_Factory());
            grassGame.Play();

            Console.WriteLine("\n동굴 스테이지 시작!");
            GameManager caveGame = new GameManager(new StageCave_Factory());
            caveGame.Play();
        }
    }

실행결과

 

 

 

추상 팩토리 패턴연관된 객체(몬스터 + 아이템 등)를 세트로 생성할 때 사용되는

디자인 패턴이다. 게임에서 스테이지, 종족, 장비 등의 세트를 한 번에 생성해야 할 때 사용된다.

(예를 들어 게임 클리어 시 드랍되는 장비)


하지만 '새로운 객체 유형을 추가해야 될 때'유지보수가 어려울 수 있으며,

특히 객체를 대량으로 생성해야 할 때 는 다른 방식을 설계해야 한다.

+ Recent posts