[swift] 커맨드 패턴

커맨드 패턴은 행위 디자인 패턴 중 하나로, 동작을 객체로 캡슐화하여 실행 시간에 결정할 수 있는 기능을 지원합니다. 이 패턴은 객체지향 소프트웨어 설계에서 각 요청을 객체로 캡슐화하여 요청을 매개변수화하며, 사용자가 원하는 요청을 큐에 저장하거나 로깅 및 취소할 수 있도록 합니다.

구성 요소

커맨드 패턴은 다음과 같은 주요한 구성 요소로 이루어집니다.

  1. Command: 실행되는 작업을 캡슐화하는 인터페이스를 정의합니다.
  2. ConcreteCommand: Command 인터페이스를 구현하여 실제 작업을 수행합니다.
  3. Invoker: 명령을 요청하고 실행자를 관리하는 클래스입니다.
  4. 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()
    }
}

위 예시는 전등을 켜는 동작을 커맨드 패턴으로 구현한 것입니다. LightOnCommandLight 객체의 동작을 캡슐화하고, RemoteControl이 실제로 명령을 실행합니다.

커맨드 패턴은 사용자가 실행하고 싶은 명령을 객체로 만들어서 관리함으로써 유연한 설계를 가능케 합니다.

결론

커맨드 패턴은 요청을 객체로 캡슐화하여 실행 시간에 결정할 수 있는 기능을 지원하여, 객체 간의 결합도를 낮추고 확장성을 높이는데 유용합니다. 객체 지향 프로그래밍에서 유연하고 확장 가능한 설계를 위해 커맨드 패턴을 활용할 수 있습니다.

참고 문헌: