- 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 |
- 다트
- 스위프트
- 디자인패턴
- 알고리즘
- 자료구조
- programmer
- rxswift
- 스위프트디자인패턴
- dart
- sort
- swift 코딩테스트
- 감성에세이
- 정렬 알고리즘
- 코테
- swift split
- Design Pattern
- 프로그래머스 swift
- programmers
- 프로그래머스 레벨2
- Algorithm
- 정렬
- datastructure
- swift
- 정렬알고리즘
- 디자인 패턴
- swift 알고리즘
- 프로그래머스 level1
- coding test
- 코딩테스트
- 프로그래머스
Bill Kim's Life...
[디자인패턴] Chain of Responsibility(책임 연쇄) : 연속적인 핸들러를 통한 요청 처리 및 전달 본문
[디자인패턴] Chain of Responsibility(책임 연쇄) : 연속적인 핸들러를 통한 요청 처리 및 전달
billnjoyce 2020. 6. 12. 18:24디자인패턴에의 Chain of Responsibility(책임 연쇄)에 대하여 Swift를 기반으로 하여 살펴봅니다.
#. 구독 대상
- 컴퓨터 및 소프트웨어 공학과 관련자
- 소프트웨어 관련 종사자
- 기타 컴퓨터 공학에 관심이 있으신 분
- 디자인패턴의 개념을 잡고 싶으신 분
- 기타 소프트웨어 개발과 지식에 관심이 있으신 모든 분들
- Swift 언어를 활용하여 디자인패턴을 공부해보고 싶으신 분들
Chain of Responsibility(책임 연쇄)
Chain of Responsibility(책임 연쇄) 패턴은 연속적인 핸들러를 통해 요청을 전달하도록 하는 행동 디자인 패턴입니다.
요청을 받으면 핸들러는 요청을 처리하거나 다음 핸들러로 요청을 전달합니다.
때로는 CoR 혹은 Chain of Command라고도 불리기도 합니다.
구조
Chain of Responsibility(책임 연쇄) 패턴을 UML로 도식화하면 아래와 같습니다.
Handler : 기본이 되는 부모 추상 클래스로서 다음 핸들러 및 핸들러에 대한 정의만 구현이 되는 객체
BaseHandler : Handler 객체를 상속받아 핸들러를 가지고 있으면서 다음 핸들러와 다음 핸들러를 호출하는 구현을 가지고 있는 클래스
ConcreteHandler : BaseHandler 객체를 상속 받아서 최종 핸들에 대한 처리를 구현하는 서브 클래스 객체
Implementation
protocol Handler : class {
@discardableResult // 결과를 사용하든 안하든 경고가 안 뜨도록 해주는 지시어
func setNext(handler: Handler) -> Handler
func handle(request: String) -> String?
}
class BaseHandler : Handler {
var nextHandler: Handler?
func setNext(handler: Handler) -> Handler {
self.nextHandler = handler
return handler
}
func handle(request: String) -> String? {
return nextHandler?.handle(request: request)
}
}
class MonkeyHandler : BaseHandler {
override func handle(request: String) -> String? {
if (request == "Banana") {
return "Monkey : I'll eat the " + request
} else {
return nextHandler?.handle(request: request)
}
}
}
class DogHandler: BaseHandler {
override func handle(request: String) -> String? {
if (request == "MeatBall") {
return "Dog : I'll eat the " + request
} else {
return nextHandler?.handle(request: request)
}
}
}
class CatHandler: BaseHandler {
override func handle(request: String) -> String? {
if (request == "Fish") {
return "Cat : I'll eat the " + request
} else {
return nextHandler?.handle(request: request)
}
}
}
func handler(handler: Handler) {
let food = ["Nut", "Banana", "Fish"]
food.forEach({ let result = handler.handle(request: $0)
if(result == nil) {
print($0 + " was left untouched.")
}
else {
print(result!)
}})
}
let monkey = MonkeyHandler()
let dog = DogHandler()
let cat = CatHandler()
monkey.setNext(handler: dog).setNext(handler: cat)
// Chain: Monkey > Dog > Cat
handler(handler: monkey)
// Nut was left untouched.
// Monkey : I'll eat the Banana
// Cat : I'll eat the Fish
// Subchain: Dog > Cat
handler(handler: dog)
// Nut was left untouched.
// Banana was left untouched.
// Cat : I'll eat the Fish
이상으로 Swift를 기반으로하여 Chain of Responsibility(책임 연쇄) 디자인 패턴을 설명하였습니다.
감사합니다.
www.slideshare.net/BillKim8/swift-chain-of-responsibility
github.com/billnjoyce/Lectures/tree/master/src/designpatterns
[참고 자료(References)]
[1] Chain of Responsibility in Swift : https://refactoring.guru/design-patterns/chain-of-responsibility/swift/example
[2] Design Patterns in Swift: Chain of Responsibility Pattern : https://medium.com/design-patterns-in-swift/design-patterns-in-swift-chain-of-responsibility-pattern-f575c85a43c
[3] Design Patterns in Swift: Chain of Responsibility : https://agostini.tech/2018/05/27/design-patterns-in-swift-chain-of-responsibility/
[4] Chain of responsibility : https://riptutorial.com/swift/example/26459/chain-of-responsibility
[5] 책임 연쇄 패턴 (Chain of Responsibility Pattern in Swift) : https://jerome.kr/entry/chain-of-responsibility-pattern
[6] Design Patterns in Swift: Chain of Responsibility : https://viblo.asia/p/design-patterns-in-swift-chain-of-responsibility-WAyK8V9nlxX
[7] A Design Pattern Story in Swift – Chapter 14: Chain Of Responsibility : http://audreyli.me/2015/07/13/a-design-pattern-story-in-swift-chapter-14-chain-of-responsibility/
[8] 책임연쇄패턴 : Chain of Responsibility : https://eastroot1590.tistory.com/entry/책임연쇄패턴-Chain-of-Responsibility
[9] Design Patterns in Swift: Chain of Responsibility
[10] 책임 연쇄 패턴 : https://ko.wikipedia.org/wiki/책임_연쇄_패턴
'CS(컴퓨터 과학) > Design Patterns' 카테고리의 다른 글
[디자인패턴] 디자인패턴의 개요 : 개념 및 목적 그리고 디자인패턴 종류 (0) | 2020.06.12 |
---|---|
[디자인패턴] Memento(메멘토) : 객체의 상태를 저장하고 복원 (0) | 2020.06.12 |
[디자인패턴] Iterator(반복자) : 컬렉션의 순회 동작을 별도의 반복자 객체로 분리 (0) | 2020.06.12 |
[디자인패턴] Visitor(방문자) : 객체의 구조와 기능을 분리, 구조는 변하지 않으면서 기능을 쉽게 추가하거나 확장 (0) | 2020.06.12 |
[디자인패턴] Mediator(중재자) : 복잡한 의존 관계와 로직은 캡슐화 (0) | 2020.06.12 |