반응형
Notice
Recent Posts
Recent Comments
- Today
- Total
작심삼일
9주차-2. Command 본문
728x90
반응형
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.
틀린 부분은 알려주시면 감사하겠습니다.
어떤 패턴인가
요청 자체를 캡슐화하는 것입니다.
이를 통해 요청이 서로 다른 사용자를 매개변수로 만들고, 요청을 대기시키거나 로깅하며, 되돌릴 수 있는 연산을 지원합니다.
이미 구현된 기능을 사용하는 것이기 때문에 의존성이 없지만, 모든 기능을 구현해야한다는 단점이 있다.
어떻게 쓰는가
Command: 연산 수행에 필요한 인터페이스를 선언합니다.
ConcreteCommand: Receiver 객체와 액션 간의 연결성을 정의합니다.
Client: ConcreteCommand 객체를 생성하고 처리 객체로 정의합니다.
Invoker: 명령어에 처리를 수행할 것을 요청합니다.
Receiver: 요청에 관련된 연산 수행 방법을 알고 있습니다.
# Receiver
class Light:
def on(self):
print("Light On")
def off(self):
print("Light Off")
# Command
class Command:
def execute(self):
pass
def undo(self):
pass
# Concrete Command
class LightOnCommand(Command):
def __init__(self, light):
self.light = light
def execute(self):
self.light.on()
def undo(self):
self.light.off()
# Invoker
class SimpleRemoteControl:
def SetCommand(self, command):
self.slot = command
def ButtonPressed(self):
self.slot.execute()
--------------------------------------------------------------------------
controller = SimpleRemoteControl()
controller.SetCommand(LightOnCommand(Light()))
controller.ButtonPressed()
어디서 활용되는가
이는 책의 내용 (p. 314)을 그대로 가져왔다.
1. 수행할 동작을 객체로 매개변수화하고자 할 때
2. 서로 다른 시간에 요청을 명시하고, 저장하며, 실행하고 싶을 때
3. 실행 취소 기능을 지원하고 싶을 때
4. 시스템이 고장 났을 때 재적용이 가능하도록 변경 과정에 대한 로깅을 지원하고 싶을 때
My Opinion
각 기능을 객체로 만든다고 생각하면 그 개념이 어렵진 않다.
기능을 구현해야하는 경우는 리모컨 등 다양한 경우에서 사용되겠지만, 내가 당장 활용할 수 있는 부분은 떠오르지 않는다.
728x90
반응형
'스터디 > 디자인 패턴' 카테고리의 다른 글
11주차. Builder (0) | 2021.08.11 |
---|---|
10주차. Memento (0) | 2021.07.28 |
9주차-1. Composite (0) | 2021.07.21 |
8주차-2. Iterator (0) | 2021.07.08 |
8주차-1. Chain of responsibility (0) | 2021.07.08 |
Comments