오늘은 "Command패턴 이론" 대해서 알아 볼 것이다.
우리가 나중에 Job, Task와 같은 것들을 관리하는 "Queue"가
전형적인 Command패턴의 예제 이다.
이런식으로 식당안에 클라이언트 세션이 있었는데
클라세션이 이런식으로 뭔가를 요청하면 직원이 와서 요청사항을 들어 줄 것이다.
그리고 요청사항을 받자마자 주방으로 가서 일을 처리를 하는 식이
우리가 이때까지 코드로 만든 것인데
주방이 작아서 직원이 한명밖에 못들어가는데
이렇게 요청사항이 많아져서 직원들이 몰려가지고
일감들이 밀리게 되었다.
( 이전시간에 lock부분에서 쓰레드들을 보면 그렇다 )
그래서 식당 주인이
"어? 일감이 밀리네 그러면 직원들 더 채용하자!" 해가지고
쓰레드(직원)을 더 추가를 해서 일을 시키도록 했는데
일이 더 빨리 처리 될 일이 없다.
이것이 우리가 코드로 구현을 하던 것이다.
그래서 이런식으로 테이블 직원, 주방 직원을 나누어서
테이블 직원은 클라세션의 요청사항을 주문서에 적어서
주방 쓰레드한테 넘겨주고
주방쓰레드는 이것을 처내기만 하면되는 것이다.
어떤 요청이 왔을 때
그것을 "주문서"에 담는다.
이게 중요한 개념이다.
이 요청을 캡슐화를 한다고 한다.
"주문서"를 만들어가지고 나중에 "주문서"를 본 사람쪽에서
진짜 똑같이 하나도 안 틀리고
주문서에서 요청한 사항을 실행할 수 있게끔 만들어 주는게
커맨드 패턴이다.
a. 주문이 오는 시점
b. 실제로 주문을 받아서 음식을 만드는 시점
a, b를 둘로 "분리"를 할 수 있다는 것이다.
그리고 또 "주문서"라는 개념이 있어서
예를 들어 주문을 취소하는 경우
요청사항을 undo하는 경우에도
커맨드패턴을 사용을 하면은
undo라는 개념을 사용할 수 있어서 편리하다.
( 문서 작업의 crtl + z )
아무튼 이렇게 편리하고
앞으로 이것을 코드로 구현을 할 것이다.