emit: 방출하다. 방사하다. dispose: 처분하다. 배치하다.
Observables are the heart of Rx.
Rx 쪽에서 여러가지 이름으로 불립니다. ‘observable’, ‘observable sequence’, ‘sequence’, ‘stream’ 등.
RxSwift에선 ‘sequence’로. Observable class가 sequence의 일종이라고 말한 것을 보면 개념에 대한 명명으로 보입니다.
In RxSwift, everything is a sequence or something that works with a sequence.
Sequence가 생성되고 subscription이 시작되면, Event 타입의 sequence event를 emit합니다.
public enum Event<Element> {
case next(Element)
case error(Swift.Error)
case completed
}
Subscription이 시작되기 전까지 sequence는 아무 동작도 하지 않으며, subscription이 시작되면 .error나 .completed가 emit될 때까지 종료되지 않습니다.
Emit된 Event들을 직접 처리할 수도 있고, case에 따라 특정 Event만 처리할 수 있게 해주는 operator들이 제공됩니다.
명시적으로 dispose()를 호출하거나 DisposeBag 객체를 사용해 dispose하지 않으면 subscription은 메모리에서 해제되지 않을 것입니다. 다행히 컴파일러가 경고를 해줍니다.
DisposeBag 객체를 사용할 경우, 해당 객체가 dealloc될 때 dispose가 호출됩니다.
Sequence를 subscribe하면 Disposable 타입의 객체가 리턴되는데, 여기에 chaining으로 operator들을...
Disposable은 dispose를 해야만 메모리에서 해제된다고 했는데, 그건 variable로 할당하지 않아도 누군가가 이미 들고 있다는 뜻일까요?
DisposeBag 객체의 dealloc 시점을 고려해야한다면 문제가 더 복잡해지는 건 아닐까요?
이번 챕터도 예제 코드가 다 정적인 sequence event만 다루고 있습니다.