brunch

You can make anything
by writing

C.S.Lewis

by 윤민섭 Dec 03. 2020

Command Pattern

행동을 정의하는 패턴

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

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



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

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari