상태와 전략은 둘 다 기본 골자는 비슷하다.
상태와 전략의 기본 골자
상태와 전략 둘 다 Context에서 InterfaceParent.Execute()를 실행한다는 것이 포인트이다. 객체지향적인 설계이기 때문인데, ConcreteSon의 종류가 현재는 2개 뿐이지만 3, 4, 5.....로 늘어나더라도 Context는 InterfaceParent.Execute()를 실행할 뿐이므로, OCP(Open-Closed Principle : 확장에는 열리고, 수정에는 닫혀야 한다는 객체지향의 원리)를 지킬 수 있다. 만약 Context에서 ConcreteSon1.Execute(), ConcreteSon2.Execute()...... 이런식으로 실제 객체의 함수를 직접호출 했다면, ConcreteSon이 늘어날 때마다 Context 내부를 수정해야 하기 때문에 지저분한 코드가 될 것이다.
기본 골자가 비슷하다면 전략패턴과 상태패턴의 차이는 무엇인가?
바로 SetConcreteSon을 어디서 호출할 것인가 이다.
이 블로그의 전략패턴 글에서, SetState함수(SetConcreteSon함수에 해당)를 키보드 입력에 따라서 Player(Client에 해당)에서 호출하고 있다.
이 블로그의 상태패턴 글에서, SetState함수(SetConcreteSon함수에 해당)를 StateOpen과 StateClose(ConcreteSon1, 2에 해당)에서 호출하고 있다.
즉, 외부에서 인위적으로 ConcreteSon 객체를 바꿔준 후 Execute()함수를 호출하고 싶다면 전략패턴을 사용해야한다.
반면, Client는 단순히 Context.Operate()함수를 호출해줄 뿐이고, 그때마다 내부적으로 알아서 ConcreteSon 객체가 바뀌게 하고 싶다면 상태패턴을 사용하면 된다.
구조의 골자는 비슷하지만 목적이 다른 두 패턴이므로 적재적소에 써주면 된다.
'유니티 > 디자인패턴' 카테고리의 다른 글
유니티 디자인패턴 - 상태 (Unity Design Patterns - State) (0) | 2019.08.22 |
---|---|
유니티 디자인패턴 - 전략(feat.유한상태기계) (Unity Design Patterns - Strategy) (0) | 2019.08.15 |
유니티 디자인패턴 - 빌더(Java와 GoF의 차이점) (Unity Design Patterns - Builder) (0) | 2019.08.07 |
유니티 디자인패턴 - 컴포지트 (Unity Design Patterns - Composite) (0) | 2019.08.05 |
유니티 디자인패턴 - 커맨드 (Unity Design Patterns - Command) (1) | 2019.08.01 |