apple/DesignPattern, Architecture
Swift 디자인패턴 Observer Pattern (옵저버 패턴)
lgvv
2022. 4. 19. 02:01
Swift 디자인패턴 Observer Pattern (옵저버 패턴)
Observer Pattern은 객체 간의 일대다 관계를 정의해, 한 객체의 상태 변화가 다른 객체에 자동으로 알리는 행동 패턴.
히스토리
- 2022-04-19: 디자인 패턴 스터디 정리
- 2024-11-29: 포스팅 글 재정리 및 조금 더 실용적인 예제 코드로 변경
Observer Pattern
Prototype Pattern은 일반적으로 3개지 개념으로 구성됨
- Subject, Publisher, Observable(관찰하고자 하는 대상): 상태를 관리하며, 관찰자(Observer) 등록, 제거, 알림 기능을 제공
- Observer, Subscriber(관찰자): Subject의 상태 변경을 통보받는 객체
- ConcreteSubject & ConcreteObserver: 패턴의 실제 구현을 담당하는 객체
코드 예제
옵저버 패턴은 RxSwift나 Combine 등으로 요새 사용하고 있어서, 기본을 그대로 쓰기 보다는 해당 개념을 토대로 이벤트 기반 프로그래밍으로 확장하는 형태로 사용하기
import SwiftUI
import Combine
private class ViewModel: ObservableObject {
var publisher = PassthroughSubject<String, Never>()
private var cancellables: Set<AnyCancellable> = []
init() {
publisher.sink { [weak self] value in
print("Received: \(value)")
}.store(in: &cancellables)
}
}
private struct ContentView: View {
@StateObject private var viewModel = ViewModel()
var body: some View {
Button("Execute") {
viewModel.publisher.send("Hello")
viewModel.publisher.send("World")
}
}
}
#Preview {
ContentView()
}
(참고)
https://www.raywenderlich.com/books/design-patterns-by-tutorials/v3.0/chapters/8-observer-pattern
https://refactoring.guru/ko/design-patterns/observer