๋ฐ์ํ
๐ง 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 |