디자인 패턴

디자인 패턴에 대해 알아보자#3 - 전략 패턴 (Strategy)

근본넘치는개발자 2024. 10. 29. 23:48

오늘은 지난 시간에 이어 전략 패턴에 대해 알아볼까 합니다.

 

2024.10.08 - [디자인 패턴] - 디자인 패턴에 대해 알아보자#2 싱글톤 패턴(feat. 유니티)

 

전략 패턴이란?

 

간단하게 정리하자면

비슷한 동작을 하는 여러 알고리즘을 만들어 두고 ,

필요할 때마다 교체할 수 있도록 만든 패턴입니다.

 

이렇게 함으로써 후에 새로운 전략을 추가하기도 쉽고

코드의 재사용성을 높일 수 있습니다.

 

(동적으로 실행될 수 있는 부분들을 캡슐화)

 

예시 

 

// 전략 인터페이스 정의 : Move
public interface IMovementStrategy
{
    void Move(Transform transform);
}


public class Character : MonoBehaviour
{
    private IMovementStrategy movementStrategy;

    // 전략을 교체
    public void SetMovementStrategy(IMovementStrategy strategy)
    {
        movementStrategy = strategy;
    }

    void Update()
    {
        movementStrategy?.Move(transform);
    }
}


// 전략 알고리즘 1
public class WalkStrategy : IMovementStrategy
{
    public void Move(Transform transform)
    {
        // 걷기 구현
        transform.position += Vector3.forward * 1f;
    }
}

// 전략 알고리즘 2
public class RunStrategy : IMovementStrategy
{
    public void Move(Transform transform)
    {
        // 달리기 구현
        transform.position += Vector3.forward * 3f;
    }
}

 

언제 사용하면 좋을까? 

행동들이 조금씩 다른, 비슷한 클래스들이 많이 존재할 때 

노출하지 말아야 할 자료 구조가 있을 때

하나의 클래스 안에서 복잡한 다중 조건문의 모습을 하고 있을 때  

 

사용하면 좋다고 합니다.

 

마무리 

결국 상속 관계가 핵심인 듯합니다.

 

UI 관리에도 사용되고, 스킬에도 사용되고

여러 방면에서 자주 사용되는 듯하여 간단하게나마 정리해 봤습니다.

 

지금 보니 은연중에 쓰고 있었던 거 같기도 하네요

 

다음 시간에는 팩토리 패턴에 대해 정리해 보겠습니다.

참고한 자료

 

https://youtu.be/ic2tGGQrq1c?si=fG1JVTzVl0OrLQEY