[swift] 옵서버 패턴

옵서버 패턴의 구성요소

  1. 주체(Subject): 상태 변화를 알릴 대상 객체입니다. 상태 변화가 발생하면 옵서버에게 알림을 전달합니다.
  2. 옵서버(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에서 흔히 사용되며, 예를 들어 알림 센터, 키보드 노티피케이션, 데이터 변경 감지 등에 적용됩니다. 이는 객체들 간의 강한 결합을 방지하고, 유지보수성과 확장성을 향상시키는 데 도움이 됩니다.

참고문헌: