[swift] 옵서버 패턴
옵서버 패턴의 구성요소
- 주체(Subject): 상태 변화를 알릴 대상 객체입니다. 상태 변화가 발생하면 옵서버에게 알림을 전달합니다.
- 옵서버(Observer): 주체 객체의 상태 변화를 감지하고, 이에 대응하는 작업을 수행하는 객체입니다.
예제
protocol Subject {
func attach(observer: Observer)
func detach(observer: Observer)
func notify()
}
protocol Observer {
func update()
}
class ConcreteSubject: Subject {
private var observers = [Observer]()
func attach(observer: Observer) {
observers.append(observer)
}
func detach(observer: Observer) {
if let index = observers.firstIndex(where: { $0 === observer }) {
observers.remove(at: index)
}
}
func notify() {
observers.forEach { $0.update() }
}
}
class ConcreteObserver: Observer {
func update() {
print("Received notification from subject")
}
}
let subject = ConcreteSubject()
let observer1 = ConcreteObserver()
let observer2 = ConcreteObserver()
subject.attach(observer: observer1)
subject.attach(observer: observer2)
subject.notify()
// 출력:
// Received notification from subject
// Received notification from subject
subject.detach(observer: observer1)
subject.notify()
// 출력:
// Received notification from subject
옵서버 패턴은 iOS에서 흔히 사용되며, 예를 들어 알림 센터, 키보드 노티피케이션, 데이터 변경 감지 등에 적용됩니다. 이는 객체들 간의 강한 결합을 방지하고, 유지보수성과 확장성을 향상시키는 데 도움이 됩니다.
참고문헌:
- https://docs.swift.org/swift-book/LanguageGuide/Protocols.html
- https://developer.apple.com/documentation/foundation/notificationcenter