Command Pattern
31 Mar 2022단순한 커맨드 적용
복사기 소프트웨어를 위한 단순한 커맨드 패턴

이 구조를 제대로 만들면 Command 객체를 시스템에 차례로 넘겨 줄 수 있고, 그것이 정확히 어떤 종류의 Command를 표현하는지 알 필요 없이 do()를 실행할 수 있다. 이 것은 흥미로운 단순화로 이어진다. 이 시스템은 이벤트 주도적이다. 시스템에서 일어나는 특정 이벤트에 따라 릴레이가 열리거나 닫히고, 모터는 움직이거나 멈추고, 클러치는 접속되거나 차단된다. 이 이벤트 대부분은 센서에 의해 탐지된다. 예를 들어, 종이 한 장이 용지 통로의 일정한 위치에 이르렀음을 광센서가 감지하면 특정 클러치를 접속시켜야 한다. 이를 위해 그냥 해당하는 ClutchOnCommand를 그 광센서를 제어하는 객체와 묶어 구현하면 된다.

센서는 자신이 하는 일을 모른다. 그저 어떤 이벤트를 탐자할 때마다 묶여 있는 Command에서 do()를 호출할 뿐이다. Sensor가 개별적인 클러치나 릴레이에 대해 알 필요가 없다는 뜻이다. 따라서 Sensor의 함수는 단순해질 수 있다.
Command Pattern은 명령의 개념을 캡슐화함으로써 연결된 장치에서 시스템의 논리적인 상호 연결을 분리해 낼 수 있게 한다.
트랜젝션
커맨드 패턴의 또 다른 일반적인 사용법이자 급여 관리 문제에서 유용하게 쓸 수 있는 방법은 트랜젝션의 생성과 실행에 관련되어 있다. 예를 들어 직원들의 데이터 베이스를 관리하는 시스템을 작성하고 있다고 생각해 보자. 사용자들은 이 데이터 베이스를 이용하여 새 직원을 추가하고 기존 직원을 삭제하고 직원의 속성을 변경하는 등의 작업을 할 수 있다.

Command 객체는 검증되지 않은 데이터를 위한 저장소 역할을 하고, 검증 메소드를 구현하여, 마지막으로 트랜젝션을 실행하는 메소드를 구현한다. AddEmployeeTransaction은 Employee가 포함하고 있는 것과 똑같은 데이터 필드를 갖고 있다. 또한 PayClassification객체에 대한 포인터도 저장한다. 이 필드와 객체는 시스템에 새로운 직원을 추가하려는 지시가 있을 때, 사용자가 지정한 날짜에 의해 생성된다.

물리적 분리
사용자에게서 데이터를 받는 코드와 그 데이터를 검증하고 그것으로 작업을 하는 코드, 그리고 업무 객체 그 자체를 극적으로 분리한다.
시간적 분리
검증과 실행 코드를 분리할 수 있다. 이 트랜젝션 객체는 우선 목록에 저장되어 검증되고나서 나중에 실행될 수 있다.