팩토리 ( Factory Method )
팩토리 패턴은 객체 생성 로직을 별도의 메서드 / 클래스로 분리한다.
클라이언트 코드가 구체적인 클래스 이름을 알 필요 없이 객체를 생성할 수 있도록 하는 생성 ( Creational ) 패턴이다.
객체 생성을 캡슐화 한다
▼예시 코드
using UnityEngine;
public abstract class Ship : MonoBehaviour
{
public abstract void Sail();
}
public class BattleCruiser : Ship
{
public override void Sail()
{
Debug.Log("Battlecruiser operational.");
}
}
public class Medivac : Ship
{
public override void Sail()
{
Debug.Log("In the pipe, five by five.");
}
}
public class Starport : MonoBehaviour
{
public GameObject battlecruiserPrefab;
public GameObject medivacPrefab;
public Ship CreateShip(string type, Vector3 position)
{
GameObject shipObject = null;
switch (type)
{
case "BattleCruiser":
shipObject = Instantiate(battlecruiserPrefab, position, Quaternion.identity);
break;
case "Medivac":
shipObject = Instantiate(medivacPrefab, position, Quaternion.identity);
break;
}
return shipObject?.GetComponent<Ship>();
}
}
주의할 점
- 클래스가 많아지면 팩토리 메서드가 복잡해질 수 있다.
- 단순히 switch - case 를 남발하면 유지보수가 어렵다 - 추상 팩토리나 DI ( 의존성 주입 )를 고려
- 남용하면 코드가 오히려 장황해질 수 있다.
사용하면 좋은 상황
구체적인 객체 생성 로직을 숨기고 싶을 때
객체 종류가 많고 런타임에 선택해야 할 때
클라이언트 코드에서 new 키워드 의존도를 줄이고 싶을 때
테스트 , 확장성 , 유지보수를 고려해야 할 때
정리
객체 생성을 별도의 팩토리에 위임하여 클라이언트는 무엇을 생성할지만 알고 어떻게 생성되는지는 몰라도 되게 하는 패턴
'⭐C Sharp > 13. 디자인 패턴' 카테고리의 다른 글
| Builder (0) | 2025.09.30 |
|---|---|
| 의존성 주입 ( Dependency Injection ) (0) | 2025.09.29 |
| Gang of Four (0) | 2025.09.29 |
| 게임에 자주 쓰이는 패턴 (0) | 2025.09.29 |
| 디자인 패턴 ( Design Pattern ) (0) | 2025.09.29 |