[swift] 커맨드 패턴
커맨드 패턴은 행위 디자인 패턴 중 하나로, 동작을 객체로 캡슐화하여 실행 시간에 결정할 수 있는 기능을 지원합니다. 이 패턴은 객체지향 소프트웨어 설계에서 각 요청을 객체로 캡슐화하여 요청을 매개변수화하며, 사용자가 원하는 요청을 큐에 저장하거나 로깅 및 취소할 수 있도록 합니다.
구성 요소
커맨드 패턴은 다음과 같은 주요한 구성 요소로 이루어집니다.
- Command: 실행되는 작업을 캡슐화하는 인터페이스를 정의합니다.
- ConcreteCommand:
Command
인터페이스를 구현하여 실제 작업을 수행합니다. - Invoker: 명령을 요청하고 실행자를 관리하는 클래스입니다.
- Receiver: 명령이 동작하는 객체입니다.
예시
// Command
protocol Command {
func execute()
}
// ConcreteCommand
class LightOnCommand: Command {
var light: Light
init(light: Light) {
self.light = light
}
func execute() {
light.turnOn()
}
}
// Receiver
class Light {
func turnOn() {
print("Light is on")
}
}
// Invoker
class RemoteControl {
var command: Command
func setCommand(command: Command) {
self.command = command
}
func pressButton() {
command.execute()
}
}
위 예시는 전등을 켜는 동작을 커맨드 패턴으로 구현한 것입니다. LightOnCommand
가 Light
객체의 동작을 캡슐화하고, RemoteControl
이 실제로 명령을 실행합니다.
커맨드 패턴은 사용자가 실행하고 싶은 명령을 객체로 만들어서 관리함으로써 유연한 설계를 가능케 합니다.
결론
커맨드 패턴은 요청을 객체로 캡슐화하여 실행 시간에 결정할 수 있는 기능을 지원하여, 객체 간의 결합도를 낮추고 확장성을 높이는데 유용합니다. 객체 지향 프로그래밍에서 유연하고 확장 가능한 설계를 위해 커맨드 패턴을 활용할 수 있습니다.
참고 문헌:
- GoF. “Design Patterns: Elements of Reusable Object-Oriented Software.” Addison-Wesley, 1994.