디자인 패턴 #6 - 커맨드 패턴 (command pattern)

1. 커맨드 패턴 (command pattern)
각종 기능을 캡슐화하여 여러 기능을 실행/관리할 수 있다. 커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러가지 다른 요구 사항을 집어 넣을 수도 있다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업 취소 기능도 지원할 수 있다.


커맨드 패턴은 (1)명령, (2)수신자, (3)발동자, (4)클라이언트로 이루어진다.
- 명령(command) : 수행 동작을 담고 있는 클래스
- 수신자(receiver) : 명령 수행하는 클래스 (ex. TV, 오디오 등 각종 기기)
- 발동자(invoker) : 명령 수행을 요청하는 클래스 (ex. 리모컨)
- 클라이언트(client) : 어떤 명령을 수행할지 결정하는 클래스

(1) 명령
LightOnCommand 클래스는 Command 인터페이스를 구현하여, Light 객체의 On/Off를 실행할 수 있다.

(2) 수신자
Light 클래스는 장소(mPlace)의 점/소등을 할 수 있다. Command 클래스의 execute() 메소드에서 호출한다.



(3) 발동자
RemoteControl 클래스는 입력된 Command를 실행한다. 총 7개의 slot이 존재하고, 미리 Command를 입력한 뒤, slot 번호를 통해 명령을 실행할 수 있다. onButtonWasPushed()와 함께 slot 번호를 입력하면 slot에 해당하는 기기의 정의된 동작을 수행하게 된다.


(4) 클라이언트
각 Command 객체와 RemoteControl 객체 생성한다. 명령의 실행과 시점을 결정한다. 하기에서는 main 클래스가 해당 역할을 담당한다. LivingRoom과 Kitchen의 점등과 소등 명령을 정의하였으며, onButtonWasPushed(), offButtonWasPushed()를 통해 실행할 수 있다.

2. 결과
수행 결과는 하기와 같다. 각 slot에 해당하는 사전 정의된 명령도 확인이 가능하다.

댓글

이 블로그의 인기 게시물

아스키 코드(ASCII)와 유니코드(unicode)

네트워크의 기본 #2 - TCP/IP 4계층

네트워크의 기본 #1 - OSI 7계층