1. 전략 패턴
전략 패턴은 런타임에
원하는 전략으로 자유롭게 교체하고 실행할 수 있는 디자인 패턴이다.
언제 사용해야 할까?
AWeaponClass::Attack()
{
if (WeaponType == Sword)
// 검 공격
else if (WeaponType == Bow)
// 활 공격
else if (WeaponType == Staff)
// 마법 공격
}
무기의 타입에 따라 다른 공격을 수행하고 있다.
해당 코드의 문제는 무기의 타입이 많아질수록
분기문이 점점 많아지고 가독성이 떨어지게 된다.
어떻게 바꿀 수 있을까?
여기서 전략패턴을 구현해볼 수 있다.

AWeaponBase* Weapon = GetWorld()->SpawnActor<AWeaponBase>();
// Bow 전략 적용
IAttackStrategy* BowStrategy = new BowAttackStrategy();
Weapon->SetAttackStrategy(BowStrategy);
Weapon->Attack(); // 🏹 화살을 쏜다!
// 전략 변경 - Staff
IAttackStrategy* StaffStrategy = new StaffAttackStrategy();
Weapon->SetAttackStrategy(StaffStrategy);
Weapon->Attack(); // ✨ 마법을 발사한다!
- 클라이언트는 분기문 대신 컨텍스트를 생성한다.
- 원하는 전략(검, 활, 지팡이)를 생성하여 컨텍스트에 설정한다.
- 그리고 컨텍스트의 공격 함수를 호출하면 해당 전략의 기능이 실행된다.

아래 참고 블로그에서 설명을 정말 잘 해놓으신 것 같다.
나중에 다시 참고하면 좋을 듯 하다.
참고
'Design Pattern' 카테고리의 다른 글
| [Design Pattern] 템플릿 메서드 (0) | 2025.04.04 |
|---|---|
| [Design Pattern] 상태 패턴 (State Pattern) (0) | 2025.04.03 |
| [Design Pattern] 디자인 패턴 (0) | 2025.04.01 |
| [DesignPattern] 모던 객체지향 설계 - 활용 예시 (0) | 2025.04.01 |
| [DesignPattern] 모던 객체지향 설계 - 추가 원칙 (0) | 2025.03.31 |