옵저버 패턴(Observer Pattern)은 소프트웨어 개발에서 사용되는 디자인 패턴 중 하나입니다. Swift에서도 옵저버 패턴을 활용하여 객체 간의 느슨한 결합을 구현할 수 있습니다. 이 블로그 포스트에서는 옵저버 패턴의 개념을 소개하고, Swift로 구현된 예제를 통해 옵저버 패턴의 사용법을 알아보겠습니다.
옵저버 패턴의 개념: 옵저버 패턴은 객체 간의 일대다(one-to-many) 의존 관계를 정의합니다. 하나의 주체(Subject) 객체의 상태가 변경될 때, 의존하는 여러 개의 옵저버(Observer) 객체들에게 알림을 보내고 업데이트를 수행합니다. 옵저버 패턴을 사용하면 주체와 옵저버 사이의 결합도를 낮추고, 유연하고 확장 가능한 코드를 작성할 수 있습니다.
옵저버 패턴 예제:
protocol Observer: AnyObject {
func update()
}
class Subject {
private var observers: [Observer] = []
func attach(observer: Observer) {
observers.append(observer)
}
func detach(observer: Observer) {
observers.removeAll { $0 === observer }
}
func notify() {
for observer in observers {
observer.update()
}
}
}
class ConcreteObserver: Observer {
private let name: String
init(name: String) {
self.name = name
}
func update() {
print("\(name) received an update.")
}
}
위의 예제에서는 Observer 프로토콜을 정의하고, Subject 클래스가 옵저버들을 관리합니다. attach(observer:) 메서드를 통해 옵저버를 추가하고, detach(observer:) 메서드를 통해 옵저버를 제거할 수 있습니다. notify() 메서드는 주체의 상태 변경 시 모든 옵저버에게 업데이트를 알리는 역할을 수행합니다.
ConcreteObserver 클래스는 Observer 프로토콜을 구현한 구체적인 옵저버입니다. update() 메서드는 업데이트를 수신할 때 호출되며, 각 옵저버는 자신의 업데이트를 처리합니다.
사용 예시:
let subject = Subject()
let observerA = ConcreteObserver(name: "Observer A")
let observerB = ConcreteObserver(name: "Observer B")
subject.attach(observer: observerA)
subject.attach(observer: observerB)
subject.notify()
subject.detach(observer: observerA)
subject.notify()
위의 예시에서는 Subject 인스턴스를 생성하고, ConcreteObserver로 구현된 옵저버를 추가합니다. notify() 메서드를 호출하여 모든 옵저버에게 업데이트를 알립니다. 그 후 detach(observer:) 메서드를 사용하여 옵저버 A를 제거하고 다시 업데이트를 알립니다.
'Swift' 카테고리의 다른 글
Swift에서 프록시 패턴(Proxy Pattern)의 개념과 예제 (0) | 2023.06.15 |
---|---|
Swift에서 데코레이터 패턴(Decorator Pattern)의 개념과 예제 (0) | 2023.06.15 |
Swift에서 전략 패턴(Strategy Pattern)의 개념과 예제 (0) | 2023.06.15 |
Swift에서 이터레이터 패턴(Iterator Pattern)의 개념과 예제 (0) | 2023.06.15 |
Swift에서 상태 패턴(State Pattern)의 개념과 예제 (0) | 2023.06.15 |