SlideShare a Scribd company logo
1 of 11
Download to read offline
SWIFT
Observer
Bill Kim(김정훈) | ibillkim@gmail.com
목차
•Observer
•Structure
•Implementation
•References
Observer
Observer(옵저버) 패턴은 특정 객체에서 발생하는 이벤트를 구독
자에게 전달하는 패턴입니다.
Observer(옵저버) 패턴은 한 객체의 상태 변화에 따라 다른 객체
의 상태도 연동 되도록 1 대 N 객체간 의존 관계를 구성하는 디자
인 패턴입니다.
Structure
Observer 패턴을 UML로 도식화하면 아래와 같습니다.
Structure
Subject : 구독자(ConcreteObserver)가 이벤트를 받을 주요 주
제 객체, 해당 Subject의 특정 이벤트 변경 시 구독하고 있는 구독
자들이 해당 이벤트를 수신한다.
Observer : 구독자들의 부모가 되는 추상 클래스 객체
ConcreteObserver : Subject의 이벤트를 받게되는 구독자 객체
Implementation
구체적인 구현에 대해서 소스 코드를 통하여 살펴봅니다.
// 구독할 주제 객체
class Subject {
var state: Int = { return Int(arc4random_uniform(10)) }()
private lazy var observers = [Observer]()
func attach(_ observer: Observer) {
print("Subject: Attached an observer.n")
observers.append(observer)
}
func detach(_ observer: Observer) {
if let idx = observers.index(where: { $0 === observer }) {
observers.remove(at: idx)
print("Subject: Detached an observer.n")
}
}
func notify() {
print("Subject: Notifying observers...n")
observers.forEach({ $0.update(subject: self)})
}
func updateState() {
state = Int(arc4random_uniform(10))
notify()
}
}
Implementation
// 구독자 부모 추상 객체
protocol Observer : class {
func update(subject: ObserverSubject)
}
// 실제 구독을 하는 객체
class ConcreteObserverA : Observer {
func update(subject: ObserverSubject) {
print("ConcreteObserverA - updated a state : (subject.state)n")
}
}
// 실제 구독을 하는 객체
class ConcreteObserverB : Observer {
func update(subject: ObserverSubject) {
print("ConcreteObserverB - updated a state : (subject.state)n")
}
}
Implementation
let subject = ObserverSubject()
let observer1 = ConcreteObserverA()
let observer2 = ConcreteObserverB()
subject.attach(observer1) // Subject: Attached an observer.
subject.attach(observer2) // Subject: Attached an observer.
subject.updateState()
// ConcreteObserverA - updated a state : 6
// ConcreteObserverB - updated a state : 6
subject.updateState()
// ConcreteObserverA - updated a state : 1
// ConcreteObserverB - updated a state : 1
subject.detach(observer2) // Subject: Detached an observer.
subject.updateState()
// ConcreteObserverA - updated a state : 9
References
[1] [Swift-Design Pattern] 옵저버 패턴(Observer pattern) :
http://throughkim.kr/2019/09/05/swift-observer/
[2] Observer Pattern(swift) : https://
linsaeng.tistory.com/6
[3] Observer Pattern in Swift : https://
magicmon.github.io/2017/07/04/Observer-Pattern/
[4] Ch 8. Oberver Pattern : https://rhammer.tistory.com/
348
[5] The observer pattern in Swift : https://medium.com/
swift-coding/the-observer-pattern-in-swift-97a0e6fafa58
References
[6] Swift Design Pattern: Observer Pattern : https://
medium.com/99ridho/swift-design-pattern-observer-
pattern-fc009b783d19
[7] 굿바이~ 옵저버 패턴 and FRP : https://hamait.tistory.com/
885
[8] Observer in Swift : https://refactoring.guru/design-
patterns/observer/swift/example
[9] Design pattern in Swift - Observers : https://
benoitpasquier.com/observer-design-pattern-swift/
[10] 옵저버 패턴 (Observer Pattern in Swift) : https://
jerome.kr/entry/observer-pattern
Thank you!

More Related Content

More from Bill 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
 
[Swift] Data Structure - Heap
[Swift] Data Structure - Heap[Swift] Data Structure - Heap
[Swift] Data Structure - HeapBill Kim
 
[Swift] Data Structure - Dequeue
[Swift] Data Structure - Dequeue[Swift] Data Structure - Dequeue
[Swift] Data Structure - DequeueBill Kim
 
[Swift] Data Structure - Stack
[Swift] Data Structure - Stack[Swift] Data Structure - Stack
[Swift] Data Structure - StackBill Kim
 
[Swift] Data Structure - Queue
[Swift] Data Structure - Queue[Swift] Data Structure - Queue
[Swift] Data Structure - QueueBill Kim
 

More from Bill Kim (20)

[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] Data Structure - Heap
[Swift] Data Structure - Heap[Swift] Data Structure - Heap
[Swift] Data Structure - Heap
 
[Swift] Data Structure - Dequeue
[Swift] Data Structure - Dequeue[Swift] Data Structure - Dequeue
[Swift] Data Structure - Dequeue
 
[Swift] Data Structure - Stack
[Swift] Data Structure - Stack[Swift] Data Structure - Stack
[Swift] Data Structure - Stack
 
[Swift] Data Structure - Queue
[Swift] Data Structure - Queue[Swift] Data Structure - Queue
[Swift] Data Structure - Queue
 

Recently uploaded

2024_INU_graduation_presentation_data.pptx
2024_INU_graduation_presentation_data.pptx2024_INU_graduation_presentation_data.pptx
2024_INU_graduation_presentation_data.pptxssuser3a8816
 
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복Kyubok Cho
 
인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)
인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)
인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)snsdl0905
 
2024_Puzners_work_introduction_slide_content
2024_Puzners_work_introduction_slide_content2024_Puzners_work_introduction_slide_content
2024_Puzners_work_introduction_slide_contentalskjde0129
 
D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한 인천대 챗봇
D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한  인천대 챗봇D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한  인천대 챗봇
D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한 인천대 챗봇hjk580018
 
현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf
현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf
현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdfSeongwon Kim
 

Recently uploaded (6)

2024_INU_graduation_presentation_data.pptx
2024_INU_graduation_presentation_data.pptx2024_INU_graduation_presentation_data.pptx
2024_INU_graduation_presentation_data.pptx
 
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
왜 학교에서의 스마트기기 활용이 학생의 대인관계에 영향을 미치는가? 조규복
 
인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)
인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)
인천대학교 졸업작품 발표 피피티 - 축제 올인원(All-In-One)
 
2024_Puzners_work_introduction_slide_content
2024_Puzners_work_introduction_slide_content2024_Puzners_work_introduction_slide_content
2024_Puzners_work_introduction_slide_content
 
D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한 인천대 챗봇
D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한  인천대 챗봇D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한  인천대 챗봇
D그룹 졸업작품 1번. 자연어 처리(NLP)를 이용한 인천대 챗봇
 
현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf
현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf
현대 학교의 체육관 혁신 방향과 과제 그리고 사례들을 정리한 자료.pdf
 

[Swift] Observer

  • 3. Observer Observer(옵저버) 패턴은 특정 객체에서 발생하는 이벤트를 구독 자에게 전달하는 패턴입니다. Observer(옵저버) 패턴은 한 객체의 상태 변화에 따라 다른 객체 의 상태도 연동 되도록 1 대 N 객체간 의존 관계를 구성하는 디자 인 패턴입니다.
  • 4. Structure Observer 패턴을 UML로 도식화하면 아래와 같습니다.
  • 5. Structure Subject : 구독자(ConcreteObserver)가 이벤트를 받을 주요 주 제 객체, 해당 Subject의 특정 이벤트 변경 시 구독하고 있는 구독 자들이 해당 이벤트를 수신한다. Observer : 구독자들의 부모가 되는 추상 클래스 객체 ConcreteObserver : Subject의 이벤트를 받게되는 구독자 객체
  • 6. Implementation 구체적인 구현에 대해서 소스 코드를 통하여 살펴봅니다. // 구독할 주제 객체 class Subject { var state: Int = { return Int(arc4random_uniform(10)) }() private lazy var observers = [Observer]() func attach(_ observer: Observer) { print("Subject: Attached an observer.n") observers.append(observer) } func detach(_ observer: Observer) { if let idx = observers.index(where: { $0 === observer }) { observers.remove(at: idx) print("Subject: Detached an observer.n") } } func notify() { print("Subject: Notifying observers...n") observers.forEach({ $0.update(subject: self)}) } func updateState() { state = Int(arc4random_uniform(10)) notify() } }
  • 7. Implementation // 구독자 부모 추상 객체 protocol Observer : class { func update(subject: ObserverSubject) } // 실제 구독을 하는 객체 class ConcreteObserverA : Observer { func update(subject: ObserverSubject) { print("ConcreteObserverA - updated a state : (subject.state)n") } } // 실제 구독을 하는 객체 class ConcreteObserverB : Observer { func update(subject: ObserverSubject) { print("ConcreteObserverB - updated a state : (subject.state)n") } }
  • 8. Implementation let subject = ObserverSubject() let observer1 = ConcreteObserverA() let observer2 = ConcreteObserverB() subject.attach(observer1) // Subject: Attached an observer. subject.attach(observer2) // Subject: Attached an observer. subject.updateState() // ConcreteObserverA - updated a state : 6 // ConcreteObserverB - updated a state : 6 subject.updateState() // ConcreteObserverA - updated a state : 1 // ConcreteObserverB - updated a state : 1 subject.detach(observer2) // Subject: Detached an observer. subject.updateState() // ConcreteObserverA - updated a state : 9
  • 9. References [1] [Swift-Design Pattern] 옵저버 패턴(Observer pattern) : http://throughkim.kr/2019/09/05/swift-observer/ [2] Observer Pattern(swift) : https:// linsaeng.tistory.com/6 [3] Observer Pattern in Swift : https:// magicmon.github.io/2017/07/04/Observer-Pattern/ [4] Ch 8. Oberver Pattern : https://rhammer.tistory.com/ 348 [5] The observer pattern in Swift : https://medium.com/ swift-coding/the-observer-pattern-in-swift-97a0e6fafa58
  • 10. References [6] Swift Design Pattern: Observer Pattern : https:// medium.com/99ridho/swift-design-pattern-observer- pattern-fc009b783d19 [7] 굿바이~ 옵저버 패턴 and FRP : https://hamait.tistory.com/ 885 [8] Observer in Swift : https://refactoring.guru/design- patterns/observer/swift/example [9] Design pattern in Swift - Observers : https:// benoitpasquier.com/observer-design-pattern-swift/ [10] 옵저버 패턴 (Observer Pattern in Swift) : https:// jerome.kr/entry/observer-pattern