반응형
스트래티지 패턴
스트래티지 패턴(Strategy Pattern)은 객체 지향 프로그래밍에서 사용되는 디자인 패턴 중 하나로,
알고리즘을 정의하고 이를 캡슐화하여 동적으로 변경할 수 있는 패턴입니다.
이 패턴을 사용하면 알고리즘을 사용하는 클라이언트 코드와 분리하여 각각 독립적으로 변경하고 확장할 수 있습니다.
주로 전략을 변경해야 하는 경우나, 유사한 여러 알고리즘이 존재할 때 유용하게 쓰입니다.
스트래티지 패턴의 구성 요소:
1. 컨텍스트(Context): 전략 객체를 사용하는 역할로, 실제 사용자가 호출하는 메서드가 포함되어 있습니다.
2. 전략(Strategy): 알고리즘을 추상화한 인터페이스나 추상 클래스입니다.
3. 구체적인 전략(Concrete Strategy)L 실제 알고리즘을 구현한 클래스들 입니다.
스트래티지 패턴 예시 코드:
// 전략(Strategy) 인터페이스
public interface IAttackStrategy
{
void Attack();
}
// 구체적인 전략(Concrete Strategy) 클래스들
public class MeleeAttackStrategy : IAttackStrategy
{
public void Attack()
{
Console.WriteLine("근접 공격을 수행합니다.");
}
}
public class RangedAttackStrategy : IAttackStrategy
{
public void Attack()
{
Console.WriteLine("원거리 공격을 수행합니다.");
}
}
// 컨텍스트(Context) 클래스
public class Character
{
private IAttackStrategy attackStrategy;
public void SetAttackStrategy(IAttackStrategy strategy)
{
attackStrategy = strategy;
}
public void PerformAttack()
{
if (attackStrategy != null)
{
attackStrategy.Attack();
}
}
}
// 클라이언트 코드
class Program
{
static void Main(string[] args)
{
Character warrior = new Character();
Character archer = new Character();
warrior.SetAttackStrategy(new MeleeAttackStrategy());
archer.SetAttackStrategy(new RangedAttackStrategy());
warrior.PerformAttack(); // Output: 근접 공격을 수행합니다.
archer.PerformAttack(); // Output: 원거리 공격을 수행합니다.
}
}
위의 예시 코드에서 IAttackStrategy 인터페이스는 알고리즘을 추상화합니다.
MeleeAttackStrategy와 RangedAttackStrategy는 이 인터페이스를 구현하여 각각의 공격 방식을
구체적으로 정의합니다. Character 클래스는 전략을 변경할 수 있는 메서드를 제공하고,
클라이언트 코드에서 해당 전략을 설정하고 공격을 수행합니다.
스트래티지 패턴을 사용하면 새로운 공격 방식을 추가하거나 기존 공격 방식을 변경해야 할 때,
기존 코드의 수정 없이 새로운 전략을 추가하거나 교체할 수 있습니다.
반응형
'Unity' 카테고리의 다른 글
유니티 퀘스트2 컨트롤러 셋팅 (0) | 2023.11.24 |
---|---|
유니티 URP(Universal Render Pipeline) 설정방법 (0) | 2023.11.23 |
Unity 디자인패턴 - 오브젝트 풀(Object Pool) (0) | 2023.08.17 |
Unity 디자인패턴 - 싱글톤(Singleton) (0) | 2023.08.17 |
Unity 성결대 미소과 경진대회 (0) | 2023.06.19 |