디자인패턴 - 전략 패턴(Strategy Pattern) [Unity]
- 전략 패턴?
-> '특정한 계열의 알고리즘들을 정의하고 각 알고리즘을 캡슐화하며 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다.
아래와 같이 사용자의 Weapon Type을 버튼을 통해 바꾸어주고, 각 총들의 연사속도 및 파티클. . 등은 각각 다르게 두도록 구현해보라고 할시, 대부분은 각 weapon들이 생성될때 마다 해당 값 또는 메서드를 정의 후, Weapon을 Switch 해주는 메소드를 통하여 장착중인 무기를 변경해주는 방식을 사용했을것이다.
아래를 보면 위 기능을 하나의 스크립트에서 구현하였다.
기본적으로 enum 타입의 Weapon을 종류별로 선언해주고, start() 와 update() 문에서 각 수행될 기능들을 Switch문에서 weapon의 값에 맞추어 수행될수있도록 구현해주었다.
위와같은 구현방식은 각 총의 종류나 세부기능들이 하나씩 추가될때마다, 각 기능을 수행할 부분에 접근해서 새로운 총에 대한 정보를 조건에 맞추어 추가해주어야한다. 이런상황에 될 경우 대형프로젝트에서는 더더욱이 유지보수가 어렵고 비효율적인 문제가 발생할수있다.
-> 이와같은 문제를 해결하기 위하여 전략패턴(Strategy Pattern)을 사용하는것이다.
아래와 같은 기본적으로 구현되어야할 GunWeapon.cs 를 추상클래스로서 생성 후, 각 총이 가져고있을 클래스별로 해당 클래스를 상속받아 오버라이드 할수있도록 해준다. 필수값(데이터)같은 경우에도 아래와 같이 구조체로 구현후 재정의 하도록 하였다.
이후에는 WeaponController.cs를 생성하여 아래 스크립트에서 실제 장착하고 있는 myWeapon에 따른 발사효과를 수행하도록 구현하면 끝이다.
이후에는 새로운 총을 추가하거나 변경할때 각 총의 스크립트에 접근해서 수정해주기만하면 된다. 모듈화와 유지보수가 간단하다는 말이다.
-> 유지보수 및 시스템 확장에 있어 필수적인 디자인 패턴이라고 볼수있다.
References :