posted by REDFORCE 2017. 5. 2. 17:44

본 글은 아래의 교재를 참고하여 정리한 내용입니다.


책 이름 : 게임프로그래밍 패턴 (한빛미디어)

저자 : 로버트 나이스트롬

옮김 : 박일


------------------------------------


GoF에 정의 한 명령 패턴을 따르면 명령패턴이란.


요청자체를 캡슐화하는 것 입니다. 이를 통해 요청과 서로 다른 사용자를 매게변수로 만들고, 요청을 대기시키거나 로깅하며, 되돌릴 수 있는 연산을 지원합니다.(GoF의 디자인 패턴. 311쪽)


위 말만 들어서는 잘 이해가 안가는데? 하고 궁금해할 수 있습니다.


그래서 명령 패턴을 한 줄로 다시 요약해보자면, 

명령 패턴은 메서드 호출을 실체화(reify)한 것이다.


라고 할 수 있습니다. 대체 메서드 호출을 실체화 했다라는게 무슨말일까요?




바로 메서드 자체를 어떤 한 객체로 만들었다는 뜻 입니다. 메서드는 우리가 알다시피 어떤 함수형태로 행위를 하는 녀석이지만, 이 행위의 내용을 바꿀수는 없습니다. 그러나 이 행위 자체를 어떤 객체로 만들어서 실체화 시키면 행위의 내용 자체를 다른 것으로 바꿔서 가능하게끔 하는 것이 바로 명령 패턴입니다.


1. 입력키 변경


그럼 명령 패턴을 활용하는 첫 번째 예를 보겠습니다.


보통 모든 게임은 입력(Input)을 통해 어떤 출력(Output)이 나오게 되는데요.

가장 보편적인 입력 방식인 키보드와 마우스를 누르는 코드가 다음과 같이 있다고 치겠습니다.



일반적으로 이런 형태의 함수로 이루어진 입력 핸들러가

게임 루프 과정에서 매 프레임마다 호출되어 입력에 대한 것을 확인하게 됩니다.


그러나 만약 사용자가 입력키에 대한 변경을 하려면 위의 키가 교체 가능하도록 키입력에 대한 어떤 객체가 필요하게 됩니다. 이 때 명령 패턴을 넣어서 한번 키입력을 변경하도록 만들어보겠습니다.


먼저, 게임에서 할 수 있는 행동을 실행할 수 있는 공통 상위 클래스를 먼저 정의합니다.


다음, 각 행동별로 하위 클래스를 만듭니다.



그리고 입력 핸들러코드로 각 버튼별로 Command 클래스 포인터를 저장합니다.



이렇게 하면 입력 처리는 이제 다음 코드로 위임됩니다.



여기까지가 Input 키 명령 패턴을 이용한 입력키 변경을 위한 방법입니다.

보시다시피 어떤 입력키에 대한 메서드 자체를 클래스로 실체화하여 입력키 값이 변경되더라도

어떤 행동을 한다라는 메서드는 동일하게 수행이 되는 구조가 되는 것이지요.


위 방법이 명령패턴의 핵심입니다만, 이것만 봐서 만족할 순 없겠지요!

다음 글에서 명령 패턴을 더 활용하는 글을 확인하도록 하겠습니다.


마무리는 이 글을 읽으셨을 분들께 감사드리며 짤방 투척!