- 추상 팩토리(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();
}
}
실행결과
추상 팩토리 패턴은 연관된 객체(몬스터 + 아이템 등)를 세트로 생성할 때 사용되는
디자인 패턴이다. 게임에서 스테이지, 종족, 장비 등의 세트를 한 번에 생성해야 할 때 사용된다.
(예를 들어 게임 클리어 시 드랍되는 장비)
하지만 '새로운 객체 유형을 추가해야 될 때' 등 유지보수가 어려울 수 있으며,
특히 객체를 대량으로 생성해야 할 때 는 다른 방식을 설계해야 한다.
'디자인 패턴 > 생성 패턴' 카테고리의 다른 글
[c#] 게임으로 이해하는 [생성 패턴] 06 - 오브젝트 풀링(Object Pooling) (0) | 2025.03.10 |
---|---|
[c#] 게임으로 이해하는 [생성 패턴] 05 - 프로토타입(Prototype) (0) | 2025.03.10 |
[c#] 게임으로 이해하는 [생성 패턴] 04 - 빌더(Builder) (0) | 2025.03.08 |
[c#] 게임으로 이해하는 [생성 패턴] 02 - 팩토리 메서드(Factory Method) (0) | 2025.02.10 |
[c#] 게임으로 이해하는 [생성 패턴] 01 - 싱글톤(Singleton) (0) | 2025.02.09 |