RxSwift

[RxSwift] ObserverType.swift 둘러보기

JoonSwift 2022. 2. 14. 14:44

스타크래프트의 옵저버

ObserverType

Observer란 '관찰자' 라는 뜻을 가지고 있습니다. 무엇을 관찰하는 관찰자! 게임 '스타크래프트'의 옵저버는 상대의 동향, 전략 등을 관찰하려는 목적으로 사용을 하고 있는데, RxSwift 에서의 Observer는 Observable sequence를 관찰하기 위해 사용합니다. ObserverType을 한번 보겠습니다.

public protocol ObserverType {
    associatedtype Element

    func on(_ event: Event<Element>)
}

ObserverType 프로토콜 위의 코멘트를 읽어보면 Observable sequence에 대한 push-style iteration을 지원한다고 적혀있습니다.

정확하게 이해하지는 못했지만, 이해해본 바로는 Observable sequence에서 일어나는 이벤트들을 관찰하고 있다가 이벤트가 발생하면 이벤트를 push하는 형태로 Observer는 이벤트를 받고, 이를 반복적으로 실행하기 위한 기능을 가진 타입을 만들어 주는 것이 ObserverType이라고 이해했습니다.

 

아래의 associatedtype ElementObserver가 관찰할 수 있는 타입을 나타내고 있습니다.

 

마지막으로 func on(_ event: Event<Element>) 메서드가 있습니다. Observer에게 Sequence 이벤트를 전달하는 역할을 하는 메서드입니다. 이 부분이 바로 Observable sequence가 ObserverType에 push-style로 이벤트를 전달해주는 형식으로 이해했습니다.

 

extension ObserverType

아래의 extension에는 next, completed, error 이벤트들을 위해 편리한 API들을 제공하고 있습니다.

public func onNext(_ element: Element) {
    self.on(.next(element))
}

public func onCompleted() {
    self.on(.completed)
}

public func onError(_ error: Swift.Error) {
    self.on(.error(error))
}

모든 메서드들이 결국 ObserverType의 func on(_ event: Event<Element>) 메서드를 활용하고 있습니다. onNext(_ element: Element)는 on(.next(element))를 줄였다고 볼 수 있습니다. 다른 메서드들도 마찬가지입니다. onCompleted()는 on(.completed)를, onError(_ error: Error)는 on(.error(error))를 반환해주면서 좀 더 읽기 좋은 코드로 바뀐 모습입니다.

 

ObservableType의 subscribe

여기서 다시한번 ObservableType.swift 의 subscribe 메서드를 한번 보겠습니다. 이전 포스팅에서 ObserverType을 처음 봤던 메서드이기도 합니다.

func subscribe<Observer: ObserverType>(
	_ observer: Observer
) -> Disposable where Observer.Element == Element

push style sequence인 ObservableType을 subscribe 해서 push-style 로 이벤드를 반복해서 받아보는 것은 ObserverType입니다. 그렇기에 파라미터로 ObserverType을 받아보는 것을 확인할 수 있습니다. 

또한, where를 활용하여 ObserverType이 어떤 ObservableType을 subscribe하기 위해서는, Observer의 Element(타입)과 ObservableType의 Element(타입)이 동일해야한다는 제약 또한 걸어주고 있습니다.

정리

ObserverType.swift 파일을 열어보고 정리해보았습니다. 이번이 저번 ObservableConvertibleType.swfit 를 열어보면서 해본 두번째 오픈소스 공부인데, 정말 코멘트들이 친절하게 쓰여있다는 부분이 놀라웠습니다.

 

'RxSwift' 카테고리의 다른 글

[RxSwift] ObservableType.swift 파일을 열어보자!  (0) 2022.02.08