커맨드 패턴은 군대와 비슷하다.
군대는 상부의 지시에 따라 이유를 막론하고, 훈련받은대로 움직인다. 커맨드 인터페이스를 상속받은 클래스는 동일한 메서드에 따라 각자 맡은 역할을 실행한다. 이는 마치 군대에서 지휘부가 특정지시를 내렸을 때, 보직에 따라 위치로 이동하여 준비하는 것과 같다.
커맨드 패턴은 단순하다. 실제 복잡한 알고리즘은 Receiver에 있고, ConcreateCommand는 Receiver를 받아서 execute메서드를 실행하는 역할만 담당한다. 여기서 excute메서드는 Command 인터페이스를 상속받는 기능이다. Client는 Command의 실행에 의존하며, 내부 알고리즘은 알 수 없다. Command의 execute()를 실행할 뿐, 각자 맡은 역할에 맞게 내부에서 움직이는 Receiver의 기능과 상관없다. 따라서 내부 알고리즘은 Command에 의해 보호된다.
그리고 설계과정에서 커맨드 패턴은 퍼사드와 오해할 가능성이 높다. 간단한 그림을 통해 퍼사드와 커맨드를 비교해보면, 전체적인 구조는 비슷하다.
퍼사드에서 client는 특정 명령어 1개만 알 수 있다.(빨간 세모) client는 구체적인 객체(진입점)에 의존하고, 해당 객체는 분리된 클래스를 집합으로 모은 뒤 client의 명령을 이행한다. 결국 퍼사드에서는 여러 클래스가 모여 1개의 일을 하는 셈이다. 반면, 커맨드 패턴에서 client는 상속받은 각각의 클래스들을 따로 사용한다. 위의 경우 같은 명령어로 각각 다른 3가지의 일을 명령할 수 있다. 이 때문에 시간, 물리적 분리를 할 수 있고, '실행', '되돌리기'와 같은 기능을 구사할 수 있다.
'코드 스터디' 카테고리의 다른 글
GoF디자인패턴「생성편」 (0) | 2020.12.11 |
---|---|
싱글톤 패턴 (0) | 2020.12.10 |
탬플릿 매서드, STRATEGY 패턴 [행위] (2) | 2020.12.08 |
퍼사드 || 미디에이터 패턴 (0) | 2020.12.07 |
소프트웨어 설계5원칙 『의존성역전 DIP』 (0) | 2020.12.04 |
댓글