Observables aka Sequences

2023. 9. 5. 18:10Swift/RxSwift

반응형

RxSwift/Documentation/GettingStarted.md at main · ReactiveX/RxSwift

  • 해당 내용은 RxSwift의 공식 깃허브의 내용을 바탕으로 작성한 글입니다.
  • 번역이나 이해가 부족하여 틀린 내용이 있을 수 있습니다.

Basics

  • 옵저버 패턴(Observable<Element> sequence)와 일반적인 시퀀스는 Rx를 이해하는데 매우 중요한 요소입니다.
  • 모든 Observable 시퀀스는 정말로 시퀀스입니다. (Observable == Sequence)
  • 스위프트 SequenceObservable은 비동기적으로 요소들을 받을 수 있습니다.
    • Observable(ObservableType)Sequence와 동일하다.
    • ObservableType.subscribe의 메소드는 Sequence.makeIterator메서드와 동일하다.
    • Observer은 시퀀스 요소들에서 next()를 통해 요소들을 받기보다는 ObservableType.subscribe메소드를 통하는것이 필요하다.
  • 숫자들의 시퀀스
    ```
  • -1--2--3--4--5--6--| // terminates normally
  • 문자열 시퀀스(에러가 포함)
    ```
  • -a--b--a--a--a---d---X // terminates with error
  • 버튼 시퀀스
    ```
  • --tap-tap-------tap--->
  • 숫자 혹은 문자열 시퀀스와 같이 유한할 수 있는 시퀀스도 있지만 버튼 시퀀스와 같이 무한한 시퀀스도 존재합니다.
  • 위 표시를 우리는 marble diagrams(마블 다이어그램)이라고 부릅니다.(Interactive diagrams of Rx Observables)
  • 만약 우리는 특정 시퀀스 문법을 정규식으로 포현하면 다음과 같다.

next (error | completed)?

  • 위 설명은 다음을 따른다.
    • 시퀀스는 0개 이상의 요소를 가진다.
    • error혹은 completed이벤트를 받았을 때 시퀀스는 더이상의 요소들을 생성할 수 없다.
  • Rx내의 시퀀스는 push interface(콜백)으로 설명된다.
enum Event<Element>  {
    case next(Element)      // next element of a sequence
    case error(Swift.Error) // sequence failed with error
    case completed          // sequence terminated successfully
}

class Observable<Element> {
    func subscribe(_ observer: Observer<Element>) -> Disposable
}

protocol ObserverType {
    func on(_ event: Event<Element>)
}
  • 시퀀스가 completed 또는 error를 보내면 시퀀스 요소를 계산하는 모든 내부 리소스가 해제됩니다.
  • dispose를 호출하거나 사용하지 않는다고 메모리 누수가 일어나는 것은 아닙니다. 그러나, 시퀀스가 완료될 때까지 쭉 사용될 것이다.
  • dispose혹은 disposeBag을 사용하는 것은 메모리를 효과적으로 관리하는 방법입니다.
반응형