C++ 디자인 패턴 : 전략 패턴 (strategy pattern)

함수 포인터로 구현한 전략 패턴




가상 함수를 대신할 방법을 찾아보자는 이슈에서

시작하여 전략패턴을 구현하는 방법까지 알아보게 되었다.

이미 NVI 관용구라는 훌륭한 방법이 있지만 좀 더 알아보겠다.




지금 우리는 게임의 캐릭터 클래스를 디자인 하고 있고

체력치를 계산하는 작업을 가상 함수를 통해 하고 있다.

체력을 계산하는 알고리즘은 캐릭터마다 다를 것이기 때문에

지극히 정상적인 설계이다. 하지만 여기서 가상 함수 대신

함수 포인터를 사용하여 좀 더 유연한 설계를 해보도록 하자.




함수 포인터를 이용한 전략 패턴은 체력치 계산을 어떤

캐릭터의 일부로 두지 않는다는 것부터 시작한다.

캐릭터의 생성자에 체력치 계산용 함수 포인터를

넘기게 만들고, 이 함수를 호출해서 실제 계산을 수행한다.




함수포인터를 이용한 전략(Strategy) 패턴의

단순한 예를 보여주는 클래스이다.






같은 캐릭터 타입으로부터 만들어진 객체들도

체력치 계산 함수를 다르게 가질 수 있는 융통성이 생겼다.

또한 게임이 실행되는 도중에 특정 캐릭터에 대한

체력치 계산함수를 바꿀수도 있다.




하지만 이 전략 패턴은 체력치가 계산되는

대상 객체의 비공개 데이터는 이 함수로 접근할 수 없다.

public 인터페이스로 얻은 정보만을 사용할 수 있기 때문이다.

( 멤버 함수가 아니기 때문에)




따라서 프렌드 함수로 선언을 하여 비공개 데이터에

접근을 할 수 있게 하여 캡슐화를 떨어뜨릴 것이냐.

즉 , 캡슐화냐 캡슐화를 떨어뜨려 얻을 수 있는 전략 패턴의

이점이 중요한가는 실제로 맡은 설계를 보면서 판단해야 한다.




+ Recent posts