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

 

Design Patterns by Tutorials, Chapter 8: Observer Pattern

The observer pattern lets one object observe changes on another object. You’ll learn two different ways to implement the observer pattern in this chapter: using key value observation (KVO), and using an `Observable` wrapper.

www.kodeco.com:443

https://refactoring.guru/ko/design-patterns/observer

 

옵서버 패턴

/ 디자인 패턴들 / 행동 패턴 옵서버 패턴 다음 이름으로도 불립니다: 이벤트 구독자, 경청자, Observer 의도 옵서버 패턴은 당신이 여러 객체에 자신이 관찰 중인 객체에 발생하는 모든 이벤트에

refactoring.guru