RxSwift

[RxSwift] RxSwift 톺아보기 - 1

RxSwift를 써보면서 공부했던 내용을 간략하게 정리한 글입니다.


1. 소개

1) 왜 RxSwift를 사용하는가?

  • 우리가 앱을 만들기 위해 작성하는 대부분의 코드는 외부 이벤트(UI 컨트롤 등)에 대한 응답을 다룬다.
  • 예를 들어 버튼 터치에 대한 액션 메서드를 작성하거나 기기의 방향 변경에 대한 옵저버를 추가해서
    특정 작업을 수행하는 코드를 작성한다.
  • 뿐만 아니라 네트워크 통신으로 받은 응답을 처리하기 위해 클로저 구문을 작성하기도 한다.
  • RxSwift는 이러한 모든 비동기적인 응답 코드들을 처리하는 일관된 시스템이다.

2) 개념

  • 모든 Observable 객체는 Sequence의 인스턴스로 간주된다.
Sequence
순차적, 반복적으로 자신의 원소에 접근할 수 있는 타입을 의미하며,
for-each 같은 반복 구문을 사용할 수 있고 contains, map 등 다양한 연산자를 제공한다. 

Sequence 프로토콜을 준수하는 타입은 내부에 makeIterator() 라는 메서드를 구현해야 하는데
이 메서드의 반환값인 Iterator 타입은 Sequence의 원소(값)를 한 번에 하나씩 제공해주는 역할을 한다.
  • 즉, Observable 객체는 자신만의 원소를 가지고 있고 이 원소에 한 번에 하나씩
    순차적으로 접근할 수 있는 객체이다.
  • Swift의 Sequence와의 중요한 차이점은 각 원소들에 대해 비동기적으로 처리할 수 있다는 것이고
    RxSwift의 다른 모든 것들은 이 개념을 확장해 나간 것이다.
    • Observable(ObservableType)은 Sequence와 같다.
    • ObservableTypesubscribe(_:) 메서드는 SequencemakeIterator()와 같다.
      즉, 원소(값)을 순차적으로 제공해주는 객체(Swift의 Iterator 역할)를 반환한다.
    • subscribe(_:)의 매개변수인 ObserverType 객체는 Observable이 방출하는(Emit)
      원소와 이벤트들을 자동으로 하나씩 넘겨 받는다.
  • Observable은 Observer에게 3가지 타입의 이벤트를 방출한다.
    • Event.next(Element)
    • Event.error(ErrorType)
    • Event.completed
  • Observablenext 이벤트를 방출하면 이후 이벤트를 계속 보낼 수 있지만
    error 또는 completed 이벤트를 방출한 경우 더 이상 이벤트를 보낼 수 없다.
  • Observable은 Observer(Subscriber)가 생기기 전까지 이벤트를 방출하지 않는다.
    즉, subscribe를 호출해야 이벤트가 방출된다.
  • subscribe(_:) 메서드는 Disposable 타입의 인스턴스를 반환하는데, 이 인스턴스는
    subscription(Observable이 이벤트를 보내고 Subscriber가 받는 행위) 같은 리소스를 나타낸다.
이름이 Disposable인 이유?
Observable의 모든 원소가 방출되어 Observer가 completed 이벤트를 받거나 error 이벤트를 받으면
그 이후엔 어떤 이벤트도 받지 못하고 재사용할 수 없게 되기 때문이다.

유한한 시퀀스는 completed 또는 error 이벤트를 보낼 때 자동으로 메모리에서 해제되지만
버튼 탭과 같은 무한한 시퀀스는 자동으로 종료되지 않기 때문에 수동으로 처리해야 한다.
  • Disposable을 통해 내부 리소스를 메모리에서 해제할 수 있으며 DisposeBag을 사용하면
    이런 리소스들을 확실하게 정리할 수 있다.

'RxSwift' 카테고리의 다른 글

[RxSwift] RxSwift 톺아보기 - 2  (0) 2022.11.01