공부/소프트웨어공학
[디자인패턴] 커맨드(Command) 패턴이란?
돌멩이수프
2024. 11. 8. 17:25
728x90
Command 패턴은 Behavioral Design Pattern이다.
전등을 키는 버튼을 만든다고 해보자
위와 같은 시스템에서 버튼을 눌렀을 때 Lamp가 아니라 Alarm이 켜지도록 하려면 어떻게 해야 하는가? 🤔
또는 버튼이 한 번 눌리면 Lamp가 켜지고 두 번 눌리면 Lamp가 꺼지도록 하려면 어떻게 해야 하는가? 🤔
➡️ 기존 코드의 Button(theLamp: Lamp)를 Button(theAlarm: Alarm)으로 변경해야 한다. OCP 위반
OCP를 만족하도록
- 변화를 식별한다. 이번 경우에는 request다.
- 변화하는 것을 클래스로 분리한다. LampOnCommand, AlarmStartCommand
- 변화하는 개념을 포용하는 개념을 추상 클래스나 인터페이스화한다. Command의 등장!
- 2번을 3번의 자식클래스로 모델링한다.
Lamp, Alarm이 Receiver 역할을 수행한다.
Strategy 패턴과 다른 점이 무어냐고 묻는다면 Receiver의 존재유무다. command에서는 receiver가 계속 변화하지만 starategy는 정해진 하나의 클래스(Robot, Employee 처럼)가 receiver 역할을 수행한다.
일반화된 클래스 다이어그램
이벤트가 발생했을 때 실행될 기능이 다양하면서 변경이 필요한 경우 이벤트를 발생시키는 클래스의 변경없이 재사용 가능하다.
https://refactoring.guru/ko/design-patterns/command
커맨드 패턴
/ 디자인 패턴들 / 행동 패턴 커맨드 패턴 다음 이름으로도 불립니다: 액션, 트랜잭션, Command 의도 커맨드는 요청을 요청에 대한 모든 정보가 포함된 독립실행형 객체로 변환하는 행동 디자인
refactoring.guru
728x90