커맨드(Command) 패턴

김서영·2024년 9월 27일
0

디자인 패턴

목록 보기
5/5

커맨드 패턴


객체의 행위(메서드)를 클래스로 만들어 캡슐화 하는 패턴

어떤 객체(A)에서 다른 객체(B)의 메서드를 실행하려면 객체(B)를 참조하고 있어야 하는 의존성이 발생한다.
이 같은 상황에서 커맨드 패턴을 적용하면 의존성을 제거할 수 있다.

또한 기능이 수정되거나 변경이 일어날 때 객체(A)의 코드를 수정없이 기능에 대한 클래스를 정의하면 되기 때문에 시스템이 확장성 있으면서 유연성을 가질 수 있다.

✨ 관련 용어 정리

💠 클라이언트 - 커맨드 객체를 생성, 인보커 객체를 통해 리시버 객체에게 할 행동을 전달
💠 인보커 객체 - 커맨드를 저장함, 리시버 객체에게 행동을 전달하는 객체
💠 커맨드 객체 - 리시버 객체의 정보 + 행동이 들어있는 객체
💠 리시버 객체 - 행동을 하는 객체
💠 setCommand() - 인보커 객체에 정의되어 있는 메서드, 클라이언트가 실행한다. 이 메서드가 호출되면, 커맨드 객체가 같이 호출된다.
💠 execute() - 해당 호출로 커맨드 객체에 있는 일련의 과정들이 수행된다.

✨ 예시로 용어 이해하기

식당에서 주문을 하는 상황으로 예시를 들자면,

1. 손님이 웨이터에게 주문을 한다.
2. 웨이터가 고객의 주문을 주문서에 적는다.
3. 웨이터는 주문서를 주방에 전달해, 주문을 요청한다. (이 때 웨이터는 주문 내용은 알 필요가 없다.)
4. 요리사가 주문서를 받고 본인의 레시피를 통해 음식을 조리한다.

💠 클라이언트 - 손님
💠 웨이터 - 인보커 객체
💠 주문서 - 커맨드 객체
💠 주방장 - 리시버 객체
💠 setCommand() - 주문
💠 execute() - 주문서대로 실행하는 것

라고 생각하면 된다.

profile
개발과 지식의 성장을 즐기는 개발자

0개의 댓글