커맨드 패턴
커맨드 패턴이란?⌗
요청을 객체의 형태로 캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록
매서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴
HEAD FIRST DESIGN 에서…⌗
커맨드 객체는 일련의 행동을 특정 리시버하고 연결시킴으로써 요구 사항을 캡슐화한 것이라는 점을 이미 배웠습니다.
이렇게 하기 위해서 행동과 리시버를 한 객체에 집어넣고, execute()라는 메소드 하나만 외부에 공개하는 방법을 씁니다.
이 메소드 호출에 의해서 리시버에서 일련의 작업이 처리됩니다.
외부에서 볼 때는 어떤 객체가 리시버 역할을 하는지, 그 리시버에서 실제로 어떤 일을 하는지 알 수 없습니다.
그냥 execute() 메소드를 호출하면 요구 사항이 처리된다는 것만 알 수 있을 뿐이죠.
구조⌗
Command
실행될 기능에 대한 인터페이스ConcreteCommand
실제로 실행되는 기능을 구현Invoker
기능의 실행을 요청하는 호출자 클래스Receiver
ConcreteCommand
에서execute
메서드를 구현할 때 필요한 클래스
장점⌗
-
작업을 요청하는 클래스와 실제로 작업을 수행하는 클래스를 분리하여 시스템의 결합도를 낮출 수 있음
-
기존 코드를 수정하지 않고 새로운 기능을 비교적 쉽게 추가할 수 있음
-
동작자체를 객체화하여 일련의 트랜잭션을 객체단위로 제공할 수 있음
단점⌗
- 구현 및 유지보수해야 하는 클래스가 많아지게 됨.
참고⌗
- Head First Design Patterns
- 기계인간 John Grib Command Pattern
- 예제 소스