SlideShare a Scribd company logo
1 of 11
Download to read offline
SWIFT
Mediator
Bill Kim(김정훈) | ibillkim@gmail.com
목차
•Mediator
•Structure
•Implementation
•References
Mediator
Mediator(미디에이터) 패턴은 복잡한 의존 관계를 줄이고자 할 때
유용한 행동 디자인 패턴입니다.
모든 클래스간의 복잡한 로직(상호작용)을 캡슐화하여 하나의 클래
스에 위임하여 처리하는 패턴으로서 비슷한 패턴으로는 Facade 패
턴과 Observer 패턴 등이 있습니다.
결론적으로 커뮤니케이션을 하고자 하는 객체가 있을 때 서로가 커
뮤니케이션 하기 복잡한 경우 이를 해결해주고 서로 간 쉽게 해주
며 커플링을 약화시켜주는 패턴입니다.
출처: https://www.crocus.co.kr/1542 [Crocus]
출처: https://www.crocus.co.kr/1542 [Crocus]
Structure
Mediator 패턴을 UML로 도식화하면 아래와 같습니다.
Structure
Mediator : 여러 Component 중재해주는 인터페이스를 가지고
있는 추상 클래스 객체
ConcreteMediator : Component 객체들을 가지고 있으면서 중
재해주는 역할을 하는 객체
Component : Mediator 객체에 의해서 관리 및 중재를 받을 기본
클래스 객체들
Implementation
구체적인 구현에 대해서 소스 코드를 통하여 살펴봅니다.
protocol Mediator : AnyObject {
func notify(sender: BaseComponent, event: String)
}
class ConcreteMediator : Mediator {
private var component1: Component1
private var component2: Component2
init(_ component1: Component1, _ component2: Component2) {
self.component1 = component1
self.component2 = component2
component1.update(mediator: self)
component2.update(mediator: self)
}
func notify(sender: BaseComponent, event: String) {
if event == "A" {
self.component2.operationC()
}
else if (event == "D") {
self.component1.operationB()
self.component2.operationC()
}
}
}
Implementation
class BaseComponent {
fileprivate weak var mediator: Mediator?
init(mediator: Mediator? = nil) {
self.mediator = mediator
}
func update(mediator: Mediator) {
self.mediator = mediator
}
}
class Component1 : BaseComponent {
func operationA() {
print("operationA")
mediator?.notify(sender: self, event: "A")
}
func operationB() {
print("operationB")
mediator?.notify(sender: self, event: "B")
}
}
class Component2 : BaseComponent {
func operationC() {
print("operationC")
mediator?.notify(sender: self, event: "C")
}
func operationD() {
print("operationD")
mediator?.notify(sender: self, event: "D")
}
}
Implementation
let component1 = Component1()
let component2 = Component2()
let mediator = ConcreteMediator(component1, component2)
component1.operationA()
// operationA
// operationC
component2.operationD()
// operationD
// operationB
// operationC
References
[1] Mediator in Swift : https://refactoring.guru/design-
patterns/mediator/swift/example
[2] Swift World: Design Patterns — Mediator : https://
medium.com/swiftworld/swift-world-design-patterns-
mediator-e6b3c35d68b0
[3] [Design Pattern] 중재자(Mediator) 패턴 - 디자인 패턴 :
https://palpit.tistory.com/201
[4] Mediator Pattern Case Study : https://
www.vadimbulavin.com/mediator-pattern-case-study/
[5] 중재자 패턴 (Mediator Pattern in Swift) : https://
jerome.kr/entry/mediator-pattern
References
[6] Mediator Pattern in Swift : https://coding.tabasoft.it/
ios/mediator-pattern-in-swift/
[7] 중재자 패턴(Mediator Pattern) : https://
www.crocus.co.kr/1542
[8] Design Patterns in Swift: Mediator : https://
codereview.stackexchange.com/questions/125725/design-
patterns-in-swift-mediator
[9] [디자인 패턴] 12. 중재자 패턴 ( Mediator Pattern ) : https://
itchipmunk.tistory.com/372
[10] [자바 디자인 패턴 이해] 16강 중재자 패턴 (Mediator) :
https://www.youtube.com/watch?v=7imEWnkVFFg
Thank you!

More Related Content

Similar to [Swift] Mediator

StarUML NS Guide - Design
StarUML NS Guide - DesignStarUML NS Guide - Design
StarUML NS Guide - Design태욱 양
 
[Swift] Composite
[Swift] Composite[Swift] Composite
[Swift] CompositeBill Kim
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발NAVER D2
 
[Swift] Decorator
[Swift] Decorator[Swift] Decorator
[Swift] DecoratorBill Kim
 
[부스트캠프 Tech Talk]손정현_PUB/SUB를 적용한 Todo앱 만들기(순한맛)
[부스트캠프 Tech Talk]손정현_PUB/SUB를 적용한 Todo앱 만들기(순한맛)[부스트캠프 Tech Talk]손정현_PUB/SUB를 적용한 Todo앱 만들기(순한맛)
[부스트캠프 Tech Talk]손정현_PUB/SUB를 적용한 Todo앱 만들기(순한맛)CONNECT FOUNDATION
 
Design patterns
Design patternsDesign patterns
Design patternsdf
 
[Swift] Visitor
[Swift] Visitor[Swift] Visitor
[Swift] VisitorBill Kim
 
Petra보고서 개발 open자료
Petra보고서 개발 open자료Petra보고서 개발 open자료
Petra보고서 개발 open자료cho hyun jong
 
Composite pattern
Composite patternComposite pattern
Composite pattern경 송
 
[Swift] Template Method
[Swift] Template Method[Swift] Template Method
[Swift] Template MethodBill Kim
 
프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)Devgear
 
[Swift] Builder
[Swift] Builder[Swift] Builder
[Swift] BuilderBill Kim
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿AnselmKim
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기우영 주
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표재정 이
 
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함 메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함 uEngine Solutions
 
안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트병한 유
 
Builder, prototype, singleton pattern
Builder, prototype, singleton patternBuilder, prototype, singleton pattern
Builder, prototype, singleton patternYoonJong Choi
 

Similar to [Swift] Mediator (20)

StarUML NS Guide - Design
StarUML NS Guide - DesignStarUML NS Guide - Design
StarUML NS Guide - Design
 
[Swift] Composite
[Swift] Composite[Swift] Composite
[Swift] Composite
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발
 
[Swift] Decorator
[Swift] Decorator[Swift] Decorator
[Swift] Decorator
 
[부스트캠프 Tech Talk]손정현_PUB/SUB를 적용한 Todo앱 만들기(순한맛)
[부스트캠프 Tech Talk]손정현_PUB/SUB를 적용한 Todo앱 만들기(순한맛)[부스트캠프 Tech Talk]손정현_PUB/SUB를 적용한 Todo앱 만들기(순한맛)
[부스트캠프 Tech Talk]손정현_PUB/SUB를 적용한 Todo앱 만들기(순한맛)
 
Design patterns
Design patternsDesign patterns
Design patterns
 
react-ko.pdf
react-ko.pdfreact-ko.pdf
react-ko.pdf
 
[Swift] Visitor
[Swift] Visitor[Swift] Visitor
[Swift] Visitor
 
Petra보고서 개발 open자료
Petra보고서 개발 open자료Petra보고서 개발 open자료
Petra보고서 개발 open자료
 
Composite pattern
Composite patternComposite pattern
Composite pattern
 
[Swift] Template Method
[Swift] Template Method[Swift] Template Method
[Swift] Template Method
 
프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)프로그래밍 언어 기초(델파이,C++)
프로그래밍 언어 기초(델파이,C++)
 
[Swift] Builder
[Swift] Builder[Swift] Builder
[Swift] Builder
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표
 
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함 메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
 
안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트안드로이드 개발자를 위한 스위프트
안드로이드 개발자를 위한 스위프트
 
Builder, prototype, singleton pattern
Builder, prototype, singleton patternBuilder, prototype, singleton pattern
Builder, prototype, singleton pattern
 
3 Professional MFC
3 Professional MFC3 Professional MFC
3 Professional MFC
 

More from Bill Kim

[Algorithm] Sorting Comparison
[Algorithm] Sorting Comparison[Algorithm] Sorting Comparison
[Algorithm] Sorting ComparisonBill Kim
 
[Algorithm] Big O Notation
[Algorithm] Big O Notation[Algorithm] Big O Notation
[Algorithm] Big O NotationBill Kim
 
[Algorithm] Shell Sort
[Algorithm] Shell Sort[Algorithm] Shell Sort
[Algorithm] Shell SortBill Kim
 
[Algorithm] Radix Sort
[Algorithm] Radix Sort[Algorithm] Radix Sort
[Algorithm] Radix SortBill Kim
 
[Algorithm] Quick Sort
[Algorithm] Quick Sort[Algorithm] Quick Sort
[Algorithm] Quick SortBill Kim
 
[Algorithm] Heap Sort
[Algorithm] Heap Sort[Algorithm] Heap Sort
[Algorithm] Heap SortBill Kim
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting SortBill Kim
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection SortBill Kim
 
[Algorithm] Merge Sort
[Algorithm] Merge Sort[Algorithm] Merge Sort
[Algorithm] Merge SortBill Kim
 
[Algorithm] Insertion Sort
[Algorithm] Insertion Sort[Algorithm] Insertion Sort
[Algorithm] Insertion SortBill Kim
 
[Algorithm] Bubble Sort
[Algorithm] Bubble Sort[Algorithm] Bubble Sort
[Algorithm] Bubble SortBill Kim
 
[Algorithm] Binary Search
[Algorithm] Binary Search[Algorithm] Binary Search
[Algorithm] Binary SearchBill Kim
 
[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)Bill Kim
 
[Swift] Data Structure - AVL
[Swift] Data Structure - AVL[Swift] Data Structure - AVL
[Swift] Data Structure - AVLBill Kim
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search TreeBill Kim
 
[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)Bill Kim
 
[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)Bill Kim
 
[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary Tree[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary TreeBill Kim
 
[Swift] Data Structure - Tree
[Swift] Data Structure - Tree[Swift] Data Structure - Tree
[Swift] Data Structure - TreeBill Kim
 
[Swift] Data Structure - Graph
[Swift] Data Structure - Graph[Swift] Data Structure - Graph
[Swift] Data Structure - GraphBill Kim
 

More from Bill Kim (20)

[Algorithm] Sorting Comparison
[Algorithm] Sorting Comparison[Algorithm] Sorting Comparison
[Algorithm] Sorting Comparison
 
[Algorithm] Big O Notation
[Algorithm] Big O Notation[Algorithm] Big O Notation
[Algorithm] Big O Notation
 
[Algorithm] Shell Sort
[Algorithm] Shell Sort[Algorithm] Shell Sort
[Algorithm] Shell Sort
 
[Algorithm] Radix Sort
[Algorithm] Radix Sort[Algorithm] Radix Sort
[Algorithm] Radix Sort
 
[Algorithm] Quick Sort
[Algorithm] Quick Sort[Algorithm] Quick Sort
[Algorithm] Quick Sort
 
[Algorithm] Heap Sort
[Algorithm] Heap Sort[Algorithm] Heap Sort
[Algorithm] Heap Sort
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting Sort
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection Sort
 
[Algorithm] Merge Sort
[Algorithm] Merge Sort[Algorithm] Merge Sort
[Algorithm] Merge Sort
 
[Algorithm] Insertion Sort
[Algorithm] Insertion Sort[Algorithm] Insertion Sort
[Algorithm] Insertion Sort
 
[Algorithm] Bubble Sort
[Algorithm] Bubble Sort[Algorithm] Bubble Sort
[Algorithm] Bubble Sort
 
[Algorithm] Binary Search
[Algorithm] Binary Search[Algorithm] Binary Search
[Algorithm] Binary Search
 
[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)
 
[Swift] Data Structure - AVL
[Swift] Data Structure - AVL[Swift] Data Structure - AVL
[Swift] Data Structure - AVL
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree
 
[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)
 
[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)
 
[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary Tree[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary Tree
 
[Swift] Data Structure - Tree
[Swift] Data Structure - Tree[Swift] Data Structure - Tree
[Swift] Data Structure - Tree
 
[Swift] Data Structure - Graph
[Swift] Data Structure - Graph[Swift] Data Structure - Graph
[Swift] Data Structure - Graph
 

[Swift] Mediator

  • 3. Mediator Mediator(미디에이터) 패턴은 복잡한 의존 관계를 줄이고자 할 때 유용한 행동 디자인 패턴입니다. 모든 클래스간의 복잡한 로직(상호작용)을 캡슐화하여 하나의 클래 스에 위임하여 처리하는 패턴으로서 비슷한 패턴으로는 Facade 패 턴과 Observer 패턴 등이 있습니다. 결론적으로 커뮤니케이션을 하고자 하는 객체가 있을 때 서로가 커 뮤니케이션 하기 복잡한 경우 이를 해결해주고 서로 간 쉽게 해주 며 커플링을 약화시켜주는 패턴입니다. 출처: https://www.crocus.co.kr/1542 [Crocus] 출처: https://www.crocus.co.kr/1542 [Crocus]
  • 4. Structure Mediator 패턴을 UML로 도식화하면 아래와 같습니다.
  • 5. Structure Mediator : 여러 Component 중재해주는 인터페이스를 가지고 있는 추상 클래스 객체 ConcreteMediator : Component 객체들을 가지고 있으면서 중 재해주는 역할을 하는 객체 Component : Mediator 객체에 의해서 관리 및 중재를 받을 기본 클래스 객체들
  • 6. Implementation 구체적인 구현에 대해서 소스 코드를 통하여 살펴봅니다. protocol Mediator : AnyObject { func notify(sender: BaseComponent, event: String) } class ConcreteMediator : Mediator { private var component1: Component1 private var component2: Component2 init(_ component1: Component1, _ component2: Component2) { self.component1 = component1 self.component2 = component2 component1.update(mediator: self) component2.update(mediator: self) } func notify(sender: BaseComponent, event: String) { if event == "A" { self.component2.operationC() } else if (event == "D") { self.component1.operationB() self.component2.operationC() } } }
  • 7. Implementation class BaseComponent { fileprivate weak var mediator: Mediator? init(mediator: Mediator? = nil) { self.mediator = mediator } func update(mediator: Mediator) { self.mediator = mediator } } class Component1 : BaseComponent { func operationA() { print("operationA") mediator?.notify(sender: self, event: "A") } func operationB() { print("operationB") mediator?.notify(sender: self, event: "B") } } class Component2 : BaseComponent { func operationC() { print("operationC") mediator?.notify(sender: self, event: "C") } func operationD() { print("operationD") mediator?.notify(sender: self, event: "D") } }
  • 8. Implementation let component1 = Component1() let component2 = Component2() let mediator = ConcreteMediator(component1, component2) component1.operationA() // operationA // operationC component2.operationD() // operationD // operationB // operationC
  • 9. References [1] Mediator in Swift : https://refactoring.guru/design- patterns/mediator/swift/example [2] Swift World: Design Patterns — Mediator : https:// medium.com/swiftworld/swift-world-design-patterns- mediator-e6b3c35d68b0 [3] [Design Pattern] 중재자(Mediator) 패턴 - 디자인 패턴 : https://palpit.tistory.com/201 [4] Mediator Pattern Case Study : https:// www.vadimbulavin.com/mediator-pattern-case-study/ [5] 중재자 패턴 (Mediator Pattern in Swift) : https:// jerome.kr/entry/mediator-pattern
  • 10. References [6] Mediator Pattern in Swift : https://coding.tabasoft.it/ ios/mediator-pattern-in-swift/ [7] 중재자 패턴(Mediator Pattern) : https:// www.crocus.co.kr/1542 [8] Design Patterns in Swift: Mediator : https:// codereview.stackexchange.com/questions/125725/design- patterns-in-swift-mediator [9] [디자인 패턴] 12. 중재자 패턴 ( Mediator Pattern ) : https:// itchipmunk.tistory.com/372 [10] [자바 디자인 패턴 이해] 16강 중재자 패턴 (Mediator) : https://www.youtube.com/watch?v=7imEWnkVFFg