본문 바로가기
코딩/알고리즘,디자인패턴

디자인패턴 - 전략 패턴

by 남대현 2025. 2. 28.
반응형

전략 패턴이란?

동일한 문제를 해결하는 여러 알고리즘을 사용하는 객체가 실행 중에 알고리즘을 바꿀 수 있도록 하는 패턴입니다.
즉, 알고리즘을 객체로 캡슐화하고, 이를 동적으로 교체하는 방식입니다.

사실 디자인 패턴이라는 말이 거창하지, 아마 예시만 봐도 아무 생각 없이 이렇게 사용하고 있었을 확률이 높다고 생각되는 패턴입니다.

사용 예시

대표적인 예시로는 게임에서의 "스킬 시스템"이 있습니다. 게임에서 각기 다른 스킬들을 Skill 클래스를 상속받은 다양한 클래스들로 정의하고, 각 클래스에서 StartSkill() 메서드를 오버라이드하여 스킬의 구체적인 동작을 구현합니다.
이후, 스킬을 실행해야 할 상황에서는 Skill 타입의 변수로 정의한 후, StartSkill()을 실행시키면, 실제로 어떤 클래스인지에 따라 각기 다른 스킬이 실행됩니다. 

이렇게 전략 패턴을 통해 스킬을 동적으로 교체하거나 실행할 수 있습니다.
아래는 해당 내용의 C# 예시 코드입니다.

// 전략 인터페이스
public interface IAttackStrategy
{
    void ExecuteAttack();
}

// 구체적인 전략 클래스들
public class SwordAttack : IAttackStrategy
{
    public void ExecuteAttack()
    {
        Console.WriteLine("Sword attack!");
    }
}

// 구체적인 전략 클래스들
public class MagicAttack : IAttackStrategy
{
    public void ExecuteAttack()
    {
        Console.WriteLine("Magic attack!");
    }
}

// 사용 예
public class Program
{
    public static void Main()
    {
        // 전략 설정 및 실행
        IAttackStrategy attackStrategy = new SwordAttack();
        attackStrategy.ExecuteAttack();  // Sword attack!

        attackStrategy = new MagicAttack();
        attackStrategy.ExecuteAttack();  // Magic attack!
    }
}


장점

  • 유연성: 전략을 동적으로 변경할 수 있어 코드 수정 없이 다른 알고리즘을 쉽게 적용합니다.
  • 캡슐화: 각각 별도의 클래스로 분리하여 코드의 응집도를 높이고, 각 알고리즘을 독립적으로 수정이 가능합니다.
  • 확장성: 새로운 전략을 추가하기 쉬워 코드가 확장성이 좋습니다.

단점

  • 클래스 수 증가: 전략을 정의하려면 여러 개의 전략 클래스가 필요하므로, 클래스 수가 증가합니다.
  • 전략 객체 관리 필요: 실행 중에 전략 객체를 교체할 수 있기 때문에, 이를 관리하는 로직이 필요합니다.

라고 하지만, 무얼 만들던 해당 객체를 관리하는건 필요하다고 생각하기 때문에 사실 객체 관리가 필요한것은 단점이라고 생각하기 힘들다.

반응형

댓글