- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자료구조
- dart
- 프로그래머스 레벨2
- 디자인패턴
- 스위프트디자인패턴
- 알고리즘
- 정렬
- coding test
- 정렬알고리즘
- swift split
- 감성에세이
- 디자인 패턴
- sort
- 정렬 알고리즘
- programmer
- 코딩테스트
- datastructure
- 프로그래머스 level1
- 다트
- programmers
- 코테
- swift
- Algorithm
- rxswift
- Design Pattern
- swift 코딩테스트
- 스위프트
- 프로그래머스
- 프로그래머스 swift
- swift 알고리즘
Bill Kim's Life...
[디자인패턴] Command(커맨드) : 실행될 기능을 캡슐화하여 여러 기능을 실행 본문
[디자인패턴] Command(커맨드) : 실행될 기능을 캡슐화하여 여러 기능을 실행
billnjoyce 2020. 6. 12. 16:37디자인패턴에의 Command(커맨드)에 대하여 Swift를 기반으로 하여 살펴봅니다.
#. 구독 대상
- 컴퓨터 및 소프트웨어 공학과 관련자
- 소프트웨어 관련 종사자
- 기타 컴퓨터 공학에 관심이 있으신 분
- 디자인패턴의 개념을 잡고 싶으신 분
- 기타 소프트웨어 개발과 지식에 관심이 있으신 모든 분들
- Swift 언어를 활용하여 디자인패턴을 공부해보고 싶으신 분들
Command(커맨드)
Command 패턴은 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 행위(Behavior) 패턴입니다.
즉, 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할 때 유용합니다.
실행될 기능을 캡슐화함으로써 기능의 실행을 요구하는 호출자(Invoker) 클래스와 실제 기능을 실행하는 수신자(Receiver) 클래스 사이의 의존성을 제거합니다.
따라서 실행될 기능의 변경에도 호출자 클래스를 수정 없이 그대로 사용 할 수 있도록 해줍니다.
구조
Command(커맨드) 패턴을 UML로 도식화하면 아래와 같습니다.
Command : 실행될 기능에 대한 인터페이스를 선언하는 객체
ConcreteCommand : 실제로 실행되는 인터페이스를 구현하는 객체
Invoker : 기능의 실행을 요청하는 호출자 클래스 객체
Receiver : ConcreteCommand 객체에서 실행할 메서드를 구현할 때 필요한 클래스 객체, ConcreteCommand 객체의 기능을 실행하기 위해서 사용하는 수신자 클래스 객체
Implementation
protocol Command {
func execute()
}
class SimpleCommand: Command {
private var payload: String
init(_ payload: String) {
self.payload = payload
}
func execute() {
print("SimpleCommand: See, I can do simple things like printing (" + payload + ")")
}
}
class ComplexCommand: Command {
private var receiver: Receiver
private var a: String
private var b: String
init(_ receiver: Receiver, _ a: String, _ b: String) {
self.receiver = receiver
self.a = a
self.b = b
}
func execute() {
print("ComplexCommand: Complex stuff should be done by a receiver object.\n")
receiver.doSomething(a)
receiver.doSomethingElse(b)
}
}
class Receiver {
func doSomething(_ a: String) {
print("Receiver: Working on (" + a + ")\n")
}
func doSomethingElse(_ b: String) {
print("Receiver: Also working on (" + b + ")\n")
}
}
class Invoker {
private var onStart: Command?
private var onFinish: Command?
func setOnStart(_ command: Command) {
onStart = command
}
func setOnFinish(_ command: Command) {
onFinish = command
}
func doSomethingImportant() {
onStart?.execute()
onFinish?.execute()
}
}
let invoker = Invoker()
invoker.setOnStart(SimpleCommand("Say Hi!"))
let receiver = Receiver()
invoker.setOnFinish(ComplexCommand(receiver, "Send email", "Save report"))
// 호출자의 실행 함수를 수정을 할 필요없이 ConcreteCommand 내의 receiver 객체를 통하여 다양한 행위를 할 수 있다.
invoker.doSomethingImportant()
// SimpleCommand: See, I can do simple things like printing (Say Hi!)
// ComplexCommand: Complex stuff should be done by a receiver object.
// Receiver: Working on (Send email)
// Receiver: Also working on (Save report)
이상으로 Swift를 기반으로하여 Command(커맨드) 디자인 패턴을 설명하였습니다.
감사합니다.
www.slideshare.net/BillKim8/swift-command
github.com/billnjoyce/Lectures/tree/master/src/designpatterns
[참고 자료(References)]
[1] [Swift-Design Pattern] 커맨드 (Command pattern) : http://throughkim.kr/2019/09/06/swift-command/
[2] [Design Pattern] 커맨드 패턴이란 : https://gmlwjd9405.github.io/2018/07/07/command-pattern.html
[3] Design Patterns in Swift: Command Pattern : https://agostini.tech/2018/06/03/design-patterns-in-swift-command-pattern/
[4] Rethinking Design Patterns in Swift: https://khawerkhaliq.com/blog/swift-design-patterns-command-pattern/
[5] Design Patterns in Swift: Command Pattern : https://medium.com/design-patterns-in-swift/design-patterns-in-swift-command-pattern-b95a1f4bbc45
[6] Swift World: Design Patterns — Command : https://medium.com/swiftworld/swift-world-design-patterns-command-cc9c56544bf0
[7] [Swift] 커맨드(Command) 패턴 : https://m.blog.naver.com/PostView.nhn?blogId=horajjan&logNo=220804709260&proxyReferer=https:%2F%2Fwww.google.com%2F
[8] Swift command design pattern : https://theswiftdev.com/swift-command-design-pattern/
[9] Command in Swift : https://refactoring.guru/design-patterns/command/swift/example
[10] [Design Pattern] 커멘드(Command) 패턴 - 디자인 패턴 : https://palpit.tistory.com/204
'CS(컴퓨터 과학) > Design Patterns' 카테고리의 다른 글
[디자인패턴] Observer(옵저버) : 객체에서 발생하는 이벤트를 구독-전달 (0) | 2020.06.12 |
---|---|
[디자인패턴] Flyweight : 객체 생성을 이미 있다면 공유 및 참조 (0) | 2020.06.12 |
[디자인패턴] Bridge(브릿지) : 기능과 구현을 분리하여 독립적 변경과 확장을 용이하게 하는 패턴 (0) | 2020.06.12 |
[디자인패턴] Facade(퍼사드) : 다수의 클래스간의 다양한 기능을 단순한 하나의 인터페이스 형태로 제공 (0) | 2020.06.12 |
[디자인패턴] Decorator(데코레이터) : 객체에 새로운 기능을 동적으로 추가 (0) | 2020.06.12 |