[swift] Command 디자인 패턴
Command 디자인 패턴은 객체 지향 소프트웨어 디자인 패턴 중 하나로, 명령을 객체로 캡슐화하여 매개변수화하고, 메서드 호출, 요청 또는 이벤트 처리를 요청하는 객체를 만드는 패턴입니다. Command 패턴은 요청을 객체로 변환하는 방식으로 요청을 매개변수화합니다. 이는 요청에 따라 다양한 메서드를 호출할 수 있도록 합니다.
Command 패턴의 가장 일반적인 사용 사례는 동작을 요청, 큐잉 또는 로깅 하는 것입니다. 예를 들어 리모컨의 버튼을 눌렀을 때 전원을 켜거나 끄는 동작을 메서드로 만들어 캡슐화하고, 이를 실행하는 기능을 만들 때 Command 패턴을 사용할 수 있습니다.
Command 디자인 패턴 사용 예시
아래는 Swift에서 Command 패턴을 사용한 간단한 예시 코드입니다.
// Command 인터페이스
protocol Command {
func execute()
}
// Receiver
class Light {
func turnOn() {
print("전원이 켜졌습니다.")
}
func turnOff() {
print("전원이 꺼졌습니다.")
}
}
// ConcreteCommand
class TurnOnLightCommand: Command {
let light: Light
init(light: Light) {
self.light = light
}
func execute() {
light.turnOn()
}
}
class TurnOffLightCommand: Command {
let light: Light
init(light: Light) {
self.light = light
}
func execute() {
light.turnOff()
}
}
// Invoker
class RemoteControl {
var command: Command?
func pressButton() {
command?.execute()
}
}
let light = Light()
let turnOnCommand = TurnOnLightCommand(light: light)
let turnOffCommand = TurnOffLightCommand(light: light)
let remoteControl = RemoteControl()
remoteControl.command = turnOnCommand
remoteControl.pressButton() // "전원이 켜졌습니다."
remoteControl.command = turnOffCommand
remoteControl.pressButton() // "전원이 꺼졌습니다."
위 코드는 전원을 켜고 끄는 Light
클래스와 그 동작을 캡슐화한 TurnOnLightCommand
, TurnOffLightCommand
클래스, 그리고 동작을 실행하는 RemoteControl
클래스를 구현한 것입니다. 이를 통해 Command 디자인 패턴이 어떻게 사용되는지 살펴볼 수 있습니다.
Command 패턴은 소프트웨어를 유지보수 가능하게 만들어줄 뿐만 아니라, 동작을 쉽게 추가하거나 수정할 수 있도록 해줍니다. 때문에 이 패턴은 소프트웨어 개발에서 자주 사용되며, 객체 지향적인 디자인을 위한 필수적인 패턴 중 하나입니다.
더 자세한 내용은 Swift Design Patterns: Command 에서 확인할 수 있습니다.