매거진 Design Pattern

Command Pattern

행동을 정의하는 패턴

by 윤민섭

Command pattern은 명령 객체에 작업을 명령하기 위한 정보를 캡슐화하는 디자인 패턴입니다.

무슨 말인지 모르겠네요, 클래스 다이어그램을 먼저 보겠습니다.


스크린샷 2020-12-03 오후 7.49.13.png


Invoker 객체는 명령을 실행하고 저장합니다.

Command 객체는 Action을 객체로 캡슐화합니다.

Receiver 객체는 Command 객체에 의해 동작하는 객체입니다.


무슨 의미인지 알 것 같긴 한데 코드로 보면 더 이해가 될 것 같습니다. 예를 들어 TV 리모컨을 구현한다고 가정해보겠습니다.


여기서 명령을 받는 Receiver 역할의 객체는 TV입니다.



각각의 명령을 담고 있는 객체는 Command가 될 것입니다.



그리고 RemoteController는 버튼이 눌릴 때 Command 객체를 사용해서 동작을 하게 됩니다.



이렇게 만든다면 어떤 장점이 있을까요?


바로 RemoteController와 Television이 서로의 존재를 모른다는 것입니다.


만약 RemoteController가 TV를 동작시키는 것이 아니라 라디오를 동작하도록 변경하고 싶다면?

Remote객체의 각 Command를 Radio용 Command로 변경시키면 훨씬 쉽겠죠? 또 라디오와 TV를 하나의 프로토콜로 정의하고 더 유연하게 사용할 수도 있을 것으로 생각됩니다.


읽어주셔서 고맙습니다.




Raywenderlich의 Design Patterns by Tutorials를 참고했습니다.

https://www.raywenderlich.com/books/design-patterns-by-tutorials/v3.0

keyword
매거진의 이전글Mediator Pattern