최근 RxSwift를 공부하면서 처음으로 연습 프로젝트에 적용을 해봤다.
프로젝트 내내 알쏭달쏭 했던 의문점!
Subject와 Observable의 차이가 뭐지...?
각각 언제 어떻게 써야 하는 걸까?
일단 Subject에 대해서 빠르게 찾아봤는데, 한줄로 요약하면 아래와 같았다.
...Observable, Observer가 정확히 뭘까?
대충 구독받는 애랑 구독해서 방출하는 요소에 반응하는애 정도로 알고 있는데 🧐
구독은 또 뭐라고 설명할 수 있을까?
정확히 이해하기 위해서 근본부터 자세히 알아보자...
공식문서에서는
ReactiveX에서 observer는 observable 을 구독한다.
observer는 observable이 방출하는 모든 아이템에 대해 반응한다.
라고 한다.
그렇군...일단 더 알아보자.
구독구독 말하는데 이 구독은 어떻게 이루어지는 걸까?
먼저, subscribe
구현부를 보면 내부에서 자체적으로 observer
를 생성한다.
그리고 asObservable
의 구현부(ObservableType의 extension)를 보면 ObservableType
을 Observable
로 변환해준다.
extension ObservableType {
/// Default implementation of converting `ObservableType` to `Observable`.
public func asObservable() -> Observable<E> {
// temporary workaround
//return Observable.create(subscribe: self.subscribe)
return Observable.create { o in
return self.subscribe(o)
}
}
}
Observable로 반환만 해주는게 아니라 .subscribe
를 통해서 각각의 observer
를 생성하고 이 observer
에 대한 subscription
을 만들어준다.
따라서 아래의 코드는
observable.subscribe(onNext: { (element) in
print(element)
})
subscribe
observer가 생성
subscription 생성
. disposable 상태.이런 과정으로 observer가 observable을 관찰할 수 있게 되는 것이다.
다시 Subject로 돌아와서...
보통의 Observable처럼 Subject도 subcribe할 수 있는 건 알겠는데, 무슨 차이일까?
Subject는 multicast방식이기 때문에 여러개의 observer를 subscribe 할 수 있다.
반면에 단순 Observable은 unicast 방식이라 한개의 observer만을 subscribe할 수 있다고 한다.
그렇다...
Subject 쓰다가 알수없는 이유로 Observable로 변경해놓고
이상하다고 머리 싸맸던 건 역시 내 잘못이었던 것이다
언제나 그랬듯이 코드는 죄가 없다
죄는 내가 있다...