티스토리 뷰

Command Pattern - 디자인 패턴

참고서적 : Head First Design Pattern
소스코드 다운로드 : http://www.wickedlysmart.com/headfirstdesignpatterns/code.html
 
패턴 정의 #7 - Command Pattern

커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며,
매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수도 있습니다.
또한 요청 내용을 큐에 저장하거나 로그로 기록할 수도 있으며,
작업취소 기능도 지원 가능합니다.
 
커맨드 패턴은 그 원리를 이해하면 그리 어렵지 않게 접근할 수 있습니다.
Command 객체에서는 execute() 메소드만 공개해 두고..
execute() 메소드에서는 각 Receiver 객체의 action()을 수행하도록 구성되어 있는 것입니다.
 
다음 클래스 다이어그램을 살펴보시기 바랍니다.
 

 
- 클라이언트는 ConcreteCommand를 생성하고 Receiver를 설정합니다.
- 인보커에는 명령이 들어 있으며, execute() 메소드를 호출함으로써 커맨드 객체에게 특정 작업을 수행해 달라는 요구를 하게 됩니다.
- Command는 모든 커맨드 객체에서 구현해야 하는 인터페이스입니다.
모든 명령은 execute() 메소드 호출을 통해 수행되며, 이 메소드에서는 리시버에 특정 작업을 처리하라는 지시를 전달합니다.
이 인터페이스를 보면 execute()한 내용르 모두 취소하는 undo() 메소드도 들어있습니다.
- ConcreteCommand는 특정 행동과 리시버 사이를 연결해 줍니다.
인보커에서 execute() 호출을 통해 요청을 하면 ConcreteCommand 객체에서 리시버에 있는 메소드를 호출함으로써 그 작업을 처리합니다.
- 리시버는 요구사항을 수행하기 위해 어떤 일을 처리해야 할는지 알고 있는 객체입니다.
 
클라이언트에서는 Invoker를 통해서 각 Command의 execute()를 실행할 수 있습니다.
Invoker의 setCommand를 통해서 여러 Command 객체를 설정하구요..
Command 객체를 생성할 때.. Receiver 객체를 전달하는 겁니다.
 
즉, 클라이언트에서의 프로그래밍 순서를 보면 다음과 같다고 할 수 있습니다.
 
1. Invoker 객체 생성
2. Receiver 객체 생성
3. ConcreteCommand 객체 생성 (Receiver 객체 전달)
4. Invoker 객체의 setCommand 실행 (ConcreteCommand 객체 전달)
5. Invoker 객체 메소드 실행 (Command 객체의 execute() 실행)
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함