본문 바로가기
Design Pattern

디자인 패턴 - 커멘드 패턴

by SuldenLion 2022. 4. 8.
반응형

커멘드 패턴은 간단하게 말하면 호출 캡슐화 - 함수 호출을(명령, 메시지) 캡슐화 한 후에 대리자(invoker)를 통해서 간접적으로 명령을 실행시키는 방법. 재사용성이 높은 클래스를 설계하는 패턴.

-이벤트가 발생했을때 실행될 기능이 다양하면서도 변경이 필요할 수 있을때 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할때 유용함. (갈아끼우기쉬움 if문 없애기)

-실행할 함수의 캡슐화로 Invoker 클래스와 Receiver 클래스 사이의 의존성을 제거함. => 실행될 기능의 변경에도 Invoker 클래스의 수정 없이 그대로 사용 가능.

 

command 객체의 본질 : [receiver reference, method reference, argument reference]의 조합. Java의 reflection 기능(object나 class reference로부터 특정 member function의 위치값 알아내는 기능, RTTI기술도 reflection의 일종인걸로 앎)을 이용하면 method reference도 이용 가능. 

command.execute();

┕> x.move(10,20); => a  ,  p.draw(g); => b

┕> a.execute();   .    b.execute();

 

ㆍCommand : 실행될 기능에 대한 인터페이스, 실행될 기능을 execute 메서드로 선언

ㆍConcreteCommand : 실제로 실행되는 기능을 구현, Command라는 인터페이스를 구현

ㆍInvoker : 기능의 실행을 request하는 호출자 클래스

ㆍReceiver : ConcreteCommand에서 execute 메서드를 구현할 때 필요한 클래스, ConcreteCommand의 기능을 실행하기 위해 사용하는 수신자 클래스

 

public class SimpleRemoteControl {

     Command slot;

     public SimpleRemoteControl() {}

     public void setCommand(Command command) {

           slot = command;

     }

     public void buttonWasPressed() {

           slot.execute();

     }

}

 

커멘드 패턴 추가 기능

- Undo : 가장 최근의 명령어를 취소하는 기능 (execute명령어랑 대치되게)

- Macro command : 여러개의 명령어를 일괄적으로 처리

 

반응형

댓글