📦 커맨드 패턴의 개요와 장점
![](https://blog.kakaocdn.net/dn/baPKxG/btsL951jqTY/ZikQ7pK4lW9LTOdnHD4e60/img.jpg)
-
커맨드 패턴은 명령을 캡슐화하여 직접 호출하지 않고, 패킹하여 전달하는 방식이다.
-
새로운 명령을 추가할 때 기존 코드를 수정할 필요가 없으며, 이는 디자인 패턴의 일반적인 강점 중 하나이다.
-
요청을 저장하고 언두, 리두 기능을 통해 재사용성과 확장성을 높일 수 있으며, 이는 특히 툴이나 멀티미디어 작업에 유용하다.
🎮 커맨드 패턴의 구조와 작동 원리
![](https://blog.kakaocdn.net/dn/b7FGjW/btsL8UGw0er/vKxC2O51zk4cmwYWlQqJWK/img.jpg)
-
커맨드 패턴은 인풋 매니저가 직접 플레이어 무브를 호출하는 대신, 여러 단계를 거쳐서 호출하는 구조이다.
-
이 구조에서 커맨드는 명령과 대상에 대한 정보를 포함해 인풋 매니저와 플레이어 무브 간의 의존성을 줄인다.
-
커맨드 인터페이스는 `익스큐트`와 `언두` 메서드를 포함하고, 이를 구체화한 `무브 커맨드`가 실질적인 작업을 수행한다.
-
이동 동작은 간단하게 `마이너스`를 사용하여 이전 위치로 되돌리는 방식으로 구현되며, 더 복잡한 동작은 각기 다른 커맨드를 통해 처리된다.
-
커맨드 패턴에서 언두와 리두 기능을 구현하기 위해 두 개의 스택을 사용해야 하며, 언두의 경우 언두 스택에서 꺼내고 리두 스택에 다시 담는 구조를 따른다.
🛠️ 커맨드 패턴 이해하기
![](https://blog.kakaocdn.net/dn/dW3DYA/btsL97dMhAP/WKtJe1nnXoaPSvieAl9Zhk/img.jpg)
-
리드와 언두는 리두 스택과 언두 스택 사이에서 오가며, 새로운 커맨드가 호출되면 과거의 리드는 사용할 수 없게 된다.
-
커맨드 인보커는 스택을 관리하면서 언두와 리두 커맨드를 호출하고 실행하는 역할을 한다.
-
커맨드 패턴은 복잡해 보일 수 있지만, 구조를 이해하면 상대적으로 단순한 개념이다.
-
커맨드를 큐에 담아 순서대로 실행할 수 있으며, 이로 인해 격투 게임에서 기술 입력을 연속적으로 처리할 수 있다.
-
다양한 디자인 패턴들이 결합된 시연 영상이 준비 중이며, 이러한 학습 자료를 통해 실질적인 이해를 높일 수 있다.
🎮 커맨드 패턴의 활용과 장점
![](https://blog.kakaocdn.net/dn/KHSFO/btsL8d0N87u/68wyHOGuzCGLiMQFLKQk2K/img.jpg)
-
키보드와 게임패드 입력을 통해 다양한 액션을 지원하며, 추가적인 버튼은 데모에 포함되어 있지 않다.
-
커맨드 패턴을 사용하면, 격투 게임 개발 시 각 액션에 대한 커맨드를 체계적으로 관리할 수 있다.
-
커맨드 패턴에서는 각각의 버튼에 대해 별도의 클래스가 필요하며, 이는 관리의 번거로움을 초래할 수 있지만, 유연한 구조를 제공한다.
-
액션 커맨드는 버튼 입력에 따라 해당 캐릭터의 행동을 실행하며, 여러 디자인 패턴이 게임 엔진에 적용되어 있다.
-
입력 이벤트 시스템은 코드의 간결성을 높이며, 프로그래머와 기획자 간의 협업을 촉진한다.
⚙️ 커맨드 패턴의 이해와 장점
![](https://blog.kakaocdn.net/dn/8yMIM/btsL9a3tGIn/Jli4DCC8KSTISvtQbTnTy1/img.jpg)
-
커맨드 패턴을 사용하면 유닛 테스트를 통해 콤보 발동 조건과 같은 요소를 체크할 수 있어, 테스트의 용이성이 높아진다.
-
조건이 충족될 경우 매칭을 호출하여 커맨드를 생성하고 실행하게 되어, 시스템의 유연성이 증가한다.
-
새로운 명령을 추가할 때 기존 코드를 수정할 필요 없이, 추가된 커맨드 클래스를 통해 쉽게 구현할 수 있어 개방 폐쇄 원칙을 준수하게 된다.
-
그러나 클래스의 수가 증가하면서 복잡성이 높아질 수 있으며, 이는 오버헤드 문제를 초래할 위험이 있다.
-
디자인 패턴을 적용할 필요가 있는 상황을 판단하여 유연하게 도입하는 것이 중요하며, 모든 상황에서 강박적으로 사용할 필요는 없다.