팩토리 패턴
팩토리 패턴은 슈퍼클래스에서 객체를 생성하기 위한 인터페이스를 제공하지만 서브클래스가 생성될 객체의 유형을 변경할 수 있도록 허용하는 생성 디자인 패턴입니다. 기본적으로 팩토리 클래스를 사용하여 개체 인스턴스를 생성함으로써 개체 생성 프로세스를 추상화합니다.
제품 생성 프로세스가 정의된 조립 라인으로 생각하면 정확한 제품이 필요에 따라 변경될 수 있습니다.
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 하위 클래스를 생성하는 프로세스를 간소화하여 코드를 깨끗하고 조직적이며 유연하게 유지했습니다.
결론
팩터리 패턴은 유지 관리 및 재사용이 가능한 코드를 생성하기 위한 핵심 자산으로, 게임 개발 프로세스에서 더 많은 유연성과 적은 결합을 허용합니다. 이 패턴은 게임과 다양한 게임 개체가 커짐에 따라 복잡성을 관리하는 데 특히 유용합니다.
'Unity > Design Pattern' 카테고리의 다른 글
Unity로 이해하는 상태 패턴 (State Pattern) (0) | 2023.08.09 |
---|---|
Unity로 이해하는 옵저버 패턴 (Observer Pattern) (0) | 2023.08.08 |
Unity로 이해하는 어댑터 패턴 (Adapter Pattern) (0) | 2023.08.06 |
Unity로 이해하는 전략 패턴(Strategy Pattern) (0) | 2023.07.20 |
Unity로 이해하는 싱글톤 패턴 (Singleton Pattern) (0) | 2023.03.20 |