스트래티지 패턴이란 다양한 객체들을 하나의 개념으로 추상화하여 하나의 인터페이스를 만들고 이를 접근점으로 활용하는 패턴입니다.
구체적으로 어떻게 사용될 수 있는지 현실에서의 예를 들어 살펴보겠습니다. "어느 날 한 어린이는 사자와 호랑이를 직접 보러가고 싶었습니다. 그래서 가족에게 동물원에 가자고 말했습니다" 여기서 어린이는 사자와 호랑이를 동물이라는 개념으로 추상화했고, 사자와 호랑이라는 객체를 동물이라는 개념으로 접근한 것입니다. 어린이는 사자와 호랑이를 직접적으로 말할 필요도 없이 동물이라는 것만 알고 있어도 되는 것이죠. 이것이 인터페이스가 됩니다.
그럼 유니티 내에서 어떻게 사용할수 있을지도 살펴보겠습니다.
위와같이 발사기를 바꾸는데 스트래티지 패턴을 활용할 수 있습니다. 이 예제에선 슈터 3개가 종류별로 있습니다. 이 3개의 슈터는 총알을 발사한다는 기본적인 유사점이 있습니다. 이를 추상화하여 IShooter 라는 인터페이스를 만들어 접근점으로 활용할 수 있습니다.
위와 같이 접근점을 두어 발사기에 접근할 수 있는 것의 장점은 클래스의 작동방식, 알고리즘, 즉 어떻게에 해당하는 부분을 모두 다르게 코딩할 수 있다는 점입니다.
어떤 발사기는 샷건처럼 발사시킬수도 있고, 어떤 건 레이저로 나가게 할수도 있고, 어떤 건 미사일이 나갈수도 있습니다. 이렇게 발사한다는 기본적인 개념은 같으나 발사한다는 것에 대한 방법은 모두 다를 수 있습니다.
코드까지 소개해드리면 조금 복잡해질듯하여 간단한 예를 들어 보겠습니다.
만약 세 개의 슈터를 번갈아가면서 쓰고 싶은 경우에서, 스트래티지 패턴을 사용하지 않으면 제각각 세 가지 슈터를 인자로 받아서 활용해야하는 반면, 스트래티지 패턴을 활용하면 IShooter shooter 라는 인자로 모든 슈터의 정보를 쉽게 받아올수 있게됩니다.
이상입니다.
한 줄 요약 : 다양한 객체에 접근이 필요할 때 다양한 객체의 공통분모를 추상화하여 인터페이스 클래스를 만들어 이를 접근점으로 활용하는 패턴