[UNITY]유니티 TIPS::여러 정보를 하나로 패킹하여 전달하는 Command 패턴 | 프로그래밍 디자인패턴, 요약정리

 

 

커맨드 패턴은 명령을 객체 형태로 캡슐화하여 처리하는데, 이를 통해 단일 책임 원칙을 준수하고 새로운 명령을 쉽게 추가할 수 있습니다. 이 패턴은 게임에서 언두/리두 기능과 같은 복잡한 명령 관리를 가능케 하며, 코드의 유연성과 재사용성을 높이는 장점을 제공합니다. 영상에서는 다양한 커맨드를 활용하여 격투 게임의 행동을 조정하는 과정을 설명합니다. 결국, 커맨드 패턴은 디자인 패턴의 장점을 잘 활용하며, 효과적인 시스템 설계에 기여하는 중요한 방법론입니다.

 

📦 커맨드 패턴의 개요와 장점

  • 커맨드 패턴은 명령을 캡슐화하여 직접 호출하지 않고, 패킹하여 전달하는 방식이다.

  • 새로운 명령을 추가할 때 기존 코드를 수정할 필요가 없으며, 이는 디자인 패턴의 일반적인 강점 중 하나이다.

  • 요청을 저장하고 언두, 리두 기능을 통해 재사용성과 확장성을 높일 수 있으며, 이는 특히 툴이나 멀티미디어 작업에 유용하다.

 

🎮 커맨드 패턴의 구조와 작동 원리

  • 커맨드 패턴은 인풋 매니저가 직접 플레이어 무브를 호출하는 대신, 여러 단계를 거쳐서 호출하는 구조이다.

  • 이 구조에서 커맨드는 명령대상에 대한 정보를 포함해 인풋 매니저와 플레이어 무브 간의 의존성을 줄인다.

  • 커맨드 인터페이스는 `익스큐트`와 `언두` 메서드를 포함하고, 이를 구체화한 `무브 커맨드`가 실질적인 작업을 수행한다.

  • 이동 동작은 간단하게 `마이너스`를 사용하여 이전 위치로 되돌리는 방식으로 구현되며, 더 복잡한 동작은 각기 다른 커맨드를 통해 처리된다.

  • 커맨드 패턴에서 언두리두 기능을 구현하기 위해 두 개의 스택을 사용해야 하며, 언두의 경우 언두 스택에서 꺼내고 리두 스택에 다시 담는 구조를 따른다.

 

🛠️ 커맨드 패턴 이해하기

  • 리드와 언두는 리두 스택과 언두 스택 사이에서 오가며, 새로운 커맨드가 호출되면 과거의 리드는 사용할 수 없게 된다.

  • 커맨드 인보커는 스택을 관리하면서 언두와 리두 커맨드를 호출하고 실행하는 역할을 한다.

  • 커맨드 패턴은 복잡해 보일 수 있지만, 구조를 이해하면 상대적으로 단순한 개념이다.

  • 커맨드를 큐에 담아 순서대로 실행할 수 있으며, 이로 인해 격투 게임에서 기술 입력을 연속적으로 처리할 수 있다.

  • 다양한 디자인 패턴들이 결합된 시연 영상이 준비 중이며, 이러한 학습 자료를 통해 실질적인 이해를 높일 수 있다.

 

🎮 커맨드 패턴의 활용과 장점

  • 키보드와 게임패드 입력을 통해 다양한 액션을 지원하며, 추가적인 버튼은 데모에 포함되어 있지 않다.

  • 커맨드 패턴을 사용하면, 격투 게임 개발 시 각 액션에 대한 커맨드를 체계적으로 관리할 수 있다.

  • 커맨드 패턴에서는 각각의 버튼에 대해 별도의 클래스가 필요하며, 이는 관리의 번거로움을 초래할 수 있지만, 유연한 구조를 제공한다.

  • 액션 커맨드는 버튼 입력에 따라 해당 캐릭터의 행동을 실행하며, 여러 디자인 패턴이 게임 엔진에 적용되어 있다.

  • 입력 이벤트 시스템은 코드의 간결성을 높이며, 프로그래머와 기획자 간의 협업을 촉진한다.

 

⚙️ 커맨드 패턴의 이해와 장점

  • 커맨드 패턴을 사용하면 유닛 테스트를 통해 콤보 발동 조건과 같은 요소를 체크할 수 있어, 테스트의 용이성이 높아진다.

  • 조건이 충족될 경우 매칭을 호출하여 커맨드를 생성하고 실행하게 되어, 시스템의 유연성이 증가한다.

  • 새로운 명령을 추가할 때 기존 코드를 수정할 필요 없이, 추가된 커맨드 클래스를 통해 쉽게 구현할 수 있어 개방 폐쇄 원칙을 준수하게 된다.

  • 그러나 클래스의 수가 증가하면서 복잡성이 높아질 수 있으며, 이는 오버헤드 문제를 초래할 위험이 있다.

  • 디자인 패턴을 적용할 필요가 있는 상황을 판단하여 유연하게 도입하는 것이 중요하며, 모든 상황에서 강박적으로 사용할 필요는 없다.