[Design Pattern] 9. ์ ๋ต ํจํด(Strategy)
์นดํ ๊ณ ๋ฆฌ: Design Pattern
ํ๊ทธ: C#, Design Pattern
Strategyํจํด
Strategy
์ ๋ต ํจํด(Strategy)
๋๋ก ๊ตฌํ
๋๋ก ์ ๋ค์ํ ๋์์ ๊ตฌํํ๋ ์ํฉ
๋ฐํ์์ ํน์ ๋์์ ๊ฐ์ฒด์ ๋ฐ๋ก ํ ๋นํ ์ ์์
context : ์์ ์ ์์
์ ์ํํ๋๋ฐ ํ์ํ ์ ๋ต์ ์ ํํ๋ ํด๋์ค
strategy : ์ ๋ต ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ค๋ก, ํน์ ํ๋์ ์ ๊ณตํจ
Client : ํด๋ผ์ด์ธํธ์์ context ํด๋์ค๋ฅผ ์์ฑ
์ฅ์
ย ย 1. ์บก์ํ ์ ๋ ์ ์์.
ย ย 2. ๋ฐํ์์ ๊ฐ์ฒด๊ฐ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ตํํ ์ ์์.
์ ๋ต ํจํด๊ณผ ์ํํจํด์ด ํผ๋๋ ์ ์์, ๊ตฌ์กฐ๊ฐ ์ ์ฌํ์ง๋ง ์๋๊ฐ ๋งค์ฐ ๋ค๋ฆ.
์ ๋ต ํจํด : ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ์ด ์์ ๋ ์ด๋ค ์ค ํ๋๋ฅผ ๋ฐํ์์ ์ ํํด์ผ ํ ๋, ์ฆ ์๊ณ ๋ฆฌ์ฆ ์ ํ์ ์ค์
์ํ ํจํด : ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ์ํ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ํ์ ๋ฐ๋ผ ํ๋์ด ๋ฌ๋ผ์ ธ์ผ ํ ๋. ์ฆ, ์ํ์ ๋ฐ๋ฅธ ํ๋ ๋ณ๊ฒฝ
Drone
using UnityEngine;
public class Drone : MonoBehaviour {
public void ApplyStrategy(IBehaviour strategy) {
strategy.Maneuver(this);
}
}
ClientStrategy
using UnityEngine;
using System.Collections.Generic;
public class ClientStrategy : MonoBehaviour {
private GameObject _drone;
private List<IBehaviour>
_components = new List<IBehaviour>();
private void SpawnDrone() {
_drone =
GameObject.CreatePrimitive(PrimitiveType.Cube);
_drone.AddComponent<Drone>();
_drone.transform.position =
Random.insideUnitSphere * 10;
ApplyRandomStrategies();
}
private void ApplyRandomStrategies() {
_components.Add(
_drone.AddComponent<Weaving>());
_components.Add(
_drone.AddComponent<Bopping>());
_components.Add(
_drone.AddComponent<Fallback>());
int index = Random.Range(0, _components.Count);
_drone.GetComponent<Drone>().
ApplyStrategy(_components[index]);
}
void OnGUI() {
if (GUILayout.Button("Spawn Drone")) {
SpawnDrone();
}
}
}
์ก๋ด, ์ ๋ฆฌ
- ๋์์ธ ํจํด์ ์ ์ด์ ํน์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ณ ๋ ค๋ ๊ฒ.(์ฑ๋ฅ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๊ณ ๋ ค)
- ์ถ๊ฐ ๋ด์ฉ ์ ๋ฆฌ
[C#] ๋์์ธ ํจํด (Design Pattern)
TOP
๋๊ธ๋จ๊ธฐ๊ธฐ