[Design Pattern] 9. μ „λž΅ νŒ¨ν„΄(Strategy)

μ—…λ°μ΄νŠΈ:

μΉ΄ν…Œκ³ λ¦¬:

νƒœκ·Έ: ,




StrategyνŒ¨ν„΄

Strategy






μ „λž΅ νŒ¨ν„΄(Strategy)

λ“œλ‘ κ΅¬ν˜„
λ“œλ‘ μ˜ λ‹€μ–‘ν•œ λ™μž‘μ„ κ΅¬ν˜„ν•˜λŠ” 상황
λŸ°νƒ€μž„μ— νŠΉμ • λ™μž‘μ„ 객체에 λ°”λ‘œ ν• λ‹Ήν•  수 있음

context : μžμ‹ μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ”λ° ν•„μš”ν•œ μ „λž΅μ„ μ„ νƒν•˜λŠ” 클래슀
strategy : μ „λž΅ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ν΄λž˜μŠ€λ“€λ‘œ, νŠΉμ • 행동을 μ œκ³΅ν•¨ Client : ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ context 클래슀λ₯Ό 생성

image

μž₯점
Β Β 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


πŸ“”

λŒ“κΈ€λ‚¨κΈ°κΈ°