게임 분석, 리뷰, 소개, 개발 전문 블로그

 

오늘 공부할 내용


객체에 명령을 내리는 방식인 명령 패턴(Command Pattern) 에 대해서 다룹니다.

 

 

동영상 강좌


https://tv.naver.com/v/8278171

좋아요와 구독하기 부탁합니다 ㅠ 

 

사용 효과


1. 캡슐화

 

명령 패턴(Command Pattern) 은 객체의 행동을 캡슐화한다.

객체의 행동이 캡슐화되었기 때문에 행동을 추가 작업에 확정성을 부여한다.

 

 

2. 재활용

 

캡슐화 되었기 때문에 다른 클래스에 의존하지 않도록 만들어지므로 행동 단위로 조립하여 쓸 수 있기 때문에 다양한 타입의 객체(몬스터 등)에 재활용할 수 있다.

 

 

구현하기


1. 만들 내용

덧셈, 뺄셈, 곱셈, 나눗셈을 하는 간단한 구조를 만들면서 명령 패턴에 대해 알아볼겁니다.

 

 

2. 클래스 구조 설명

클래스 다이어그램이라는 것이 있는데, 이렇게 간단한 구조에서는 도형으로 표현하는게 훨씬 이해하기 쉬울거 같네요.

그리고 클래스 다이어그램도 공부가 필요한거라서 이 강좌에서는 도형으로 최대한 표현할 겁니다.

PS** 다른 건 몰라도 아래의 시스템 구조를 파악하면서 각자 이해한 내용을 도형으로 표현해보세요.

CommandReceiver 클래스에는 덧셈, 나누기, 곱하기, 뺄셈을 하는 함수들이 존재합니다.

AbstractCommand 를 상속받은 4개의 Command는 각 역활에 맞게 Excute() 함수를 통해 CommandReceiver 안의 함수(계산을 처리하는) 를 호출합니다.

 

예제: 더하기Command 는 CommandReceiver 안의 Add() 함수를 호출합니다.

 

PS) 디자인패턴은 C# 문법 숙달자정도의 난이도가 있는 강좌라서 문법에 대해 세밀하게 설명은 하지 않습니다. 추상 클래스 AbstractCommand를 상속받은 4개의 Command는 비슷한 형태가 되겠지요?

 

 

3. 코드 작성

 

3-1 CommandReceiver.cs

명령을 받는 클래스입니다.

 

 

3-2 AbstractCommand.cs

추상화 클래스입니다. 

 

 

3-3 DivideCommand.cs

CommandReceiver에게 나누기 계산 명령을 내리는 클래스입니다. 

 

 

3-4 AddCommand.cs

CommandReceiver에게 덧셈 계산 명령을 내리는 클래스입니다. ( 위 DivideCommand.cs 와 형태가 같죠? )

 

 

3-5 SubstractCommand.cs

CommandReceiver에게 뺄셈 계산 명령을 내리는 클래스입니다. 

 

 

3-6 MultiplyCommand.cs

CommandReceiver에게 곱셈 계산 명령을 내리는 클래스입니다. 

 

3-7 Calculator.cs

계산에 필요한 Command를 생성하고 명령을 실행시키는 클래스입니다.

 

필요한 모든 내용을 작성했습니다. 

유니티 에디터에서 버튼을 만들고 테스트 해 보세요. (중급 강좌니깐 생략!)

 

4. 테스트 영상

 

 

활용하기


1. 만들 내용 설명

키보드 조작을 구현하면서 명령 패턴을 사용합니다. 

명령 패턴으로 캡슐화된 각 패턴은 키보드 조작을 하지 않는 AI의 행동에서도 사용할 수 있으며 키보드의 조작 버튼을 쉽게 변경할 수 있습니다.

 

 

2. 클래스 구조 설명

CommandReceiver_Actor에는 다양한 행동이 입력되어 있습니다.

Player 클래스가 유저의 조작을 입력받고 그에 맞는 Command를 호출하면서 매개변수로 Actor를 전달합니다.

명령 요청을 전달받은 특정 Command가 전달받은 Actor를 이용해서 Actor의 특정 함수를 실행하라고 명령을 내립니다.

명령을 받은 CommandReceiver_Actor가 행동을 취합니다.

PS** Actor 부분은 명령패턴의 예제를 위해 간단하게 구현된 겁니다.

 

 

3. 코드 작성

 

3-1 CommandReceiver_Actor.cs

최종적으로 명령을 받고 행동하는 클래스입니다. 

 

 

3-2 Command.cs

추상화 클래스입니다.

Command를 상속받은 클래스에서는 생성자와 Excute() 를 반듯이 구현해줘야 합니다.

 

 

3-3 RollCommand.cs

 

 

3-4 FireCommand.cs

 

 

3-5 SkillCommand.cs

 

 

3-6 JumpCommand.cs

 

3-7 Player.cs

 

4. 테스트 영상

 

 

** 위의 코드는 명령 패턴(Command Pattern)을 위한 목적으로 최대한 간결하게 작성하였다.