본문 바로가기

프로그래밍 강의 메모/코딩으로 학습하는 GoF의 디자인 패턴_백기선

행동 관련 디자인 패턴 > 커맨드 패턴(Command Pattern)

https://inf.run/6Shr

 

코딩으로 학습하는 GoF의 디자인 패턴 - 인프런 | 강의

디자인 패턴을 알고 있다면 스프링 뿐 아니라 여러 다양한 기술 및 프로그래밍 언어도 보다 쉽게 학습할 수 있습니다. 또한, 보다 유연하고 재사용성이 뛰어난 객체 지향 소프트웨어를 개발할

www.inflearn.com

 

 

커맨드 패턴

  • 행동 관련 디자인 패턴.
  • 요청을 캡슐화 하여 호출자 Invoker와 수신자 Receiver를 분리하는 패턴.
  • 요청을 처리하는 방법이 바뀌더라도, 호출자의 코드는 변경되지 않는다.
  • 커맨드라는 객체를 사용하여 호출자와 수신자를 분리시킨다.

 

 

이 패턴이 필요한 상황

코드의 변경이 자주 일어나고 요청을 보내는 쪽에서 비슷한 코드가 중복되는 경우.

이러한 현상은 호출자와 수신자 간의 관계가 타이트하게 연결되어서 발생한다.

 

 

 

 

커맨드 패턴을 적용한다면,

요청 자체를 캡슐화하여,

요청안에 Receiver가 누구이고,

리시버의 어떤 오퍼레이션을 호출해야하는지,

오퍼레이션을 호출할 때 필요한 파라미터가 무엇인지 등의,

명령을 수행하기 위한 모든 작업들을 ConcreteCommand라는 객체로 만든다.

 

호출자는 Command 인터페이스의 execute()라는 메시지만 호출한다.

 

 

 

 

 



 

커맨드 패턴 적용하기

ConcreteCommand는 Receiver를 구체적으로 어떻게 사용해야 하는지 알고 있어야 한다. 

그래서 이 ConcreteCommand 클래스는 바뀐다.

‘버튼의 코드를 바꾸다가 이제 커맨드가 바꾸는 것이면 조삼모사가 아닌가’ 라는 생각이 들 수 있다.

 

Invoker들의 코드가 안바뀐다는 것이 중요하다.

커맨드를 재사용할 수 있다는 것도 장점 중 하나이다.

 

 

커맨드 패턴의 장점

1. 기존 코드를 변경하지 않고 새로운 커맨드를 만들 수 있다.

2. 수신자의 코드가 변경되어도 호출자의 코드는 변경되지 않는다.

Open-Closed Principle(OCP) 만족.

 

 

 

 

 

https://refactoring.guru/ko/design-patterns/command

 

Command

/ Design Patterns / Behavioral Patterns Command Also known as: Action, Transaction Intent Command is a behavioral design pattern that turns a request into a stand-alone object that contains all information about the request. This transformation lets you p

refactoring.guru