Unity

디자인패턴 - 전략 패턴(Strategy Pattern) [Unity]

Tennessee201 2022. 11. 9. 16:56
728x90

- 전략 패턴?

-> '특정한 계열의 알고리즘들을 정의하고 각 알고리즘을 캡슐화하며 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다. 

 

전략 패턴 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 전략 패턴(strategy pattern) 또는 정책 패턴(policy pattern)은 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴이다. 전략 패턴은 특정한 계열

ko.wikipedia.org


 아래와 같이 사용자의 Weapon Type을 버튼을 통해 바꾸어주고, 각 총들의 연사속도 및 파티클. . 등은 각각 다르게 두도록 구현해보라고 할시, 대부분은 각 weapon들이 생성될때 마다 해당 값 또는 메서드를 정의 후, Weapon을 Switch 해주는 메소드를 통하여 장착중인 무기를 변경해주는 방식을 사용했을것이다.

아래를 보면 위 기능을 하나의 스크립트에서 구현하였다.

기본적으로 enum 타입의 Weapon을 종류별로 선언해주고, start() 와 update() 문에서 각 수행될 기능들을 Switch문에서 weapon의 값에 맞추어 수행될수있도록 구현해주었다.

위와같은 구현방식은 각 총의 종류나 세부기능들이 하나씩 추가될때마다, 각 기능을 수행할 부분에 접근해서 새로운 총에 대한 정보를 조건에 맞추어 추가해주어야한다. 이런상황에 될 경우 대형프로젝트에서는 더더욱이 유지보수가 어렵고 비효율적인 문제가 발생할수있다.


-> 이와같은 문제를 해결하기 위하여 전략패턴(Strategy Pattern)을 사용하는것이다. 

 

아래와 같은 기본적으로 구현되어야할 GunWeapon.cs 를 추상클래스로서 생성 후, 각 총이 가져고있을 클래스별로 해당 클래스를 상속받아 오버라이드 할수있도록 해준다. 필수값(데이터)같은 경우에도 아래와 같이 구조체로 구현후 재정의 하도록 하였다.

Using() 같은 경우에는 부모클래스에서 정의하는 방식이 좋다. -> 이럴때는 Virtual void 로 변경 후 작업하면 된다. ( Using() : 실제 총을 발사하는 함수 )

이후에는 WeaponController.cs를 생성하여 아래 스크립트에서 실제 장착하고 있는 myWeapon에 따른 발사효과를 수행하도록 구현하면 끝이다. 

이후에는 새로운 총을 추가하거나 변경할때 각 총의 스크립트에 접근해서 수정해주기만하면 된다. 모듈화와 유지보수가 간단하다는 말이다. 

Player 오브젝트의 인스팩터에 소유중인 총들을 전부 추가해주고 실제 장착무기는 MyWeapon에서 이를 갈아끼워주기만하면 된다.

 

-> 유지보수 및 시스템 확장에 있어 필수적인 디자인 패턴이라고 볼수있다. 


References : 

728x90