🧠 Unity 디자인 패턴 - 전략(Strategy) 패턴
1. 전략 패턴이란?
전략(Strategy) 패턴은 행동(알고리즘)을 객체로 분리하여, 런타임에 자유롭게 교체할 수 있도록 하는 패턴입니다.
"동일한 행동 인터페이스를 가진 여러 전략 중 하나를 선택해서 실행하는 구조"입니다.
게임에서는 주로 공격 방식, 이동 방식, 스킬 사용 방식 등에 다양하게 활용됩니다.
2. 언제 사용하나요?
- 캐릭터의 스킬/공격 방식이 상황에 따라 바뀌어야 할 때
- AI의 행동 방식, 경로 찾기 알고리즘 등 다양한 알고리즘 중 선택적으로 적용해야 할 때
- if나 switch 문으로 전략 분기를 하고 있을 때 → 리팩토링 시 효과적
3. 구조 구성요소
역할 | 설명 |
ISkillStrategy | 전략(알고리즘) 인터페이스 |
FireSkill, IceSkill 등 | 실제 전략을 구현한 클래스들 |
Player | 전략을 사용하는 컨텍스트 역할 |
4. Unity 예제: 플레이어 스킬 시스템
📦 Step 1: 전략 인터페이스 정의
public interface ISkillStrategy
{
void Use(GameObject caster);
}
🔥 Step 2: 다양한 스킬 전략들
using UnityEngine;
public class FireSkill : ISkillStrategy
{
public void Use(GameObject caster)
{
Debug.Log("🔥 파이어볼 발사!");
}
}
public class IceSkill : ISkillStrategy
{
public void Use(GameObject caster)
{
Debug.Log("❄️ 아이스 스톰 시전!");
}
}
public class HealSkill : ISkillStrategy
{
public void Use(GameObject caster)
{
Debug.Log("💚 힐링 시전! HP +30");
}
}
🧍 Step 3: 전략을 사용하는 플레이어
using UnityEngine;
public class Player : MonoBehaviour
{
private ISkillStrategy currentSkill;
public void SetSkill(ISkillStrategy skill)
{
currentSkill = skill;
}
public void UseSkill()
{
if (currentSkill != null)
currentSkill.Use(gameObject);
else
Debug.Log("스킬이 설정되지 않았습니다.");
}
}
🕹️ Step 4: 전략 전환 예시
public class GameManager : MonoBehaviour
{
public Player player;
void Start()
{
player.SetSkill(new FireSkill());
player.UseSkill(); // 🔥
player.SetSkill(new IceSkill());
player.UseSkill(); // ❄️
player.SetSkill(new HealSkill());
player.UseSkill(); // 💚
}
}
5. 정리 및 장단점
✅ 장점
- if/switch 분기 없이 동작을 교체할 수 있음
- 전략을 독립적으로 구현/유지/확장 가능
- 런타임에 알고리즘 변경이 용이함
❌ 단점
- 클래스 수 증가
- 구조를 이해하는 데 약간의 시간 필요
✅ 마무리 한 줄 요약
전략 패턴은 **"어떻게 실행할지를 나중에 결정할 수 있는 설계"**로, 캐릭터 스킬, AI 전략, UI 전환 방식 등에서 매우 유연하게 사용할 수 있습니다.
'C# > DesignPattern' 카테고리의 다른 글
DesignPattern - 중재자(Mediator) 패턴 (1) | 2025.08.06 |
---|---|
DesignPattern - 커맨드(Command) 패턴 (0) | 2025.08.06 |
DesignPattern - 상태 패턴(State Pattern) vs FSM (2) | 2025.08.06 |
DesignPattern - 이벤트 버스(Event Bus) 패턴 (0) | 2025.08.06 |
DesignPattern - 팩토리(Factory) 패턴 (1) | 2025.08.06 |