오늘은 스탠다드반 특강이 있었는데, 매번 특강을 들을 때 마다 사실 벽을 느낀다.
내가 이해를 너무 못하고 있는게 아닐까 ? 이걸 다 이해할 수 있는건가 ?
물론 이미 알고있고, 이해한 부분도 많지만 이해하기 힘든 부분도 꽤 있었던 것 같다.. ㅎㅎ
그리고 나는 개발자가 벽을 느끼는것은 버그를 만난것처럼 아주 좋은 증상이라고 생각한다.
빨리 배우는것이 빨리 고치는것만큼 좋은것같다.
항상 이런 이해하기 힘든것을 이해했을때 아 내가 성장하고 있는게 맞구나 라고 느끼는것같다.
그럼 이제 전략패턴에 대해 알아보자.
전략패턴이란 ?
알고리즘을 캡슐화 하여 동적으로 교체할 수 있게 하는 코딩규칙이다.
이게 무슨소리냐 ? 나도 모르겠다.. 이해할때까지 계속해서 알아보자.
전략패턴의 개념
- 행위를 정의하는 인터페이스를 만들고, 이 인터페이스를 구현한 여러가지 전략을 만들어 각기 다른 동작을 구현한다.
- 전략 객체를 외부에서 주입하거나, 필요한 시점에 동적으로 설정할 수 있다.
1. 인터페이스를 설정하고 2. 해당 인터페이스를 구현하고 3. 구현된 클래스를 알맞게 사용한다.
이렇게 까지 작성한뒤에 내가 전략패턴에 대해서 더 알아보았다.
왜냐하면 사실 이해가 안됐기 때문이다.
이게 무슨말이냐면 전략패턴은 추상적인것이기때문이다.
우선 아래의 전략패턴의 예제를 보자.
// 무기의 행동을 정의하는 인터페이스
public interface IWeaponStrategy
{
void UseWeapon();
}
// 인터페이스를 구현해주고
public class SwordStrategy : IWeaponStrategy
{
public void UseWeapon()
{
Debug.Log("검을 휘두른다.");
}
}
public class BowStrategy : IWeaponStrategy
{
public void UseWeapon()
{
Debug.Log("화살을 발사한다.");
}
}
public class MagicStrategy : IWeaponStrategy
{
public void UseWeapon()
{
Debug.Log("마법을 사용한다.");
}
}
// 무기를 사용한다.
public class Character
{
private IWeaponStrategy weaponStrategy;
public void SetWeapon(IWeaponStrategy newWeaponStrategy)
{
weaponStrategy = newWeaponStrategy;
}
// 현재 설정된 무기를 사용
public void Attack()
{
if (weaponStrategy != null)
{
weaponStrategy.UseWeapon();
}
else
{
Debug.Log("무기가 없습니다.");
}
}
}
이런 방식으로 작성한 다음 아래의 코드에서 필요에 따라 동적으로 무기를 바꿔준다.
public class GameController : MonoBehaviour
{
private void Start()
{
Character character = new Character();
character.SetWeapon(new SwordStrategy());
character.Attack();
character.SetWeapon(new BowStrategy());
character.Attack();
character.SetWeapon(new MagicStrategy());
character.Attack();
}
}
이게 전략패턴의 예제이다.
전략패턴의 예제를 보면 알겠지만 모르고 보면 그냥 캡슐화가 잘 된 코드로 보인다.
그렇다 전략패턴의 진짜 핵심은 캡슐화를 하고 손쉽게 교체가능한 코드인것이다.
이제 이해가 되기 시작했을것이다.(나도 적으면서 이제 이해됨..)
갑자기 마법무기가 사라져도
새로운 무기가 생겨도
기존의 무기가 변경되어도
다른 코드에 별 다른 영향을 주지않는 아주 객체지향적인 코딩 방식의 틀이라고 생각하면 된다.
전략패턴을 사용하기 적합하지 않다고 해서, 캡슐화를 하지 않는것은 올바르지 않다.
하지만 캡슐화를 했다고 해서 전략패턴을 꼭 사용해야하는것도 아니다.
이런 디자인패턴을 무조건 적용 해야 한다고 생각하지 말고 왜 사용해야하는지
어떤 부분이 핵심인지
전달하고자 하는 바를 이해하고 코딩하는 연습을 해보자
'[UNITY] > TIL: UNITY' 카테고리의 다른 글
[디자인패턴] 이벤트 버스 패턴 (0) | 2024.10.30 |
---|---|
[디자인패턴] 상태패턴 (0) | 2024.10.29 |
움직이는 플랫폼 및 위에 있는 객체 함께 이동하기 (0) | 2024.10.27 |
[Unity] 제네릭 싱글톤 알아보기 (1) | 2024.10.27 |
[Unity] 캐릭터 애니메이션 설정하기 (3D) (0) | 2024.10.25 |