RxSwift - 1

1. 일반 명령형 프로그래밍과의 차이

// 명령형 프로그래밍
var b = 27
var c = 33
var a = b + c
print(a) // 60
vart c = 40
print(a) // 60

// 반응형 프로그래밍
var b = 27
var c = 33
var a = b + c
print(a) // 60
var c = 40
print(a) // 67 

일반 명령형 프로그래밍은 a의 값을 정한 후 c의 값이 바뀌여도 a의 값은 바뀌지 않는다. 하지만 반응형 프로그래밍은 c의 값이 변하는 것에 반응하여 a 의 값 또한 변한다. 반응형 프로그래밍을 대표하는 프로그래밍 예시는 엑셀이다.

2. 용어 정리

  • Subject : Observable 과 Observer 를 한꺼번에 부르는 용어. 기본적으로 관찰하거나 관찰 당함.
  • BehaviorSubject : 구독하면 Subject 에 의해 반환한 가장 최근 값을 가져오고, 구독 이후에 반환하는 값을 가져온다.
  • PublishSubject : 구독하면 구독 이후에 반환하는 값을 가져온다.
  • ReplaySubject : 구독하면 구독 이후 반환하는 값과 구독 이전에 반환한 값을 가져온다. 이전 반환 값은 구독하는 ReplaySubject의 버퍼 사이즈에 따라 다르다. 버퍼 사이즈는 Subject의 초기화 일 때 알 수 있다.
  • Variable : Behaviorsubject를 감싸는 .onNext() 이벤트만 제출할 수 있는 래퍼런스.

3. Observable

  • Hot 과 Cold로 구분된다.
    1. Hot Observable
      • 생성과 동시에 이벤트를 방출, subscribe 되는 시점과 상관없이 옵저버들에게 이벤트를 중간부터 전송해준다.
      • 관련 메소드 : publish / multicast / connect / replay / replayAll / share / shareReplay / shareReplayLatestWhileConnected
    2. Cold Observable
      • 옵저버가 subscribe 되는 시전부터 이벤트를 생성하여 방출하기 시작.
      • 기본적으로 Hot Observable로 생성하지 않은 것들이 Cold Observable 이라고 생각하면 된다.
    3. 이해를 돕기 위한 설명
      • 티비 지상파 방송은 시청자(observer) 가 어느 시점에 방송을 청취하던지 상관없이 방송이 진행된다. 시청자는 방송을 시청(subscribe) 하는 시점 (middle emit event) 부터 방송을 볼 수 있다. (이벤트를 받을 수 있다) —> 이 개념이 Hot Observable
      • VOD의 경우 어떤 시청자(observer)가 시청을 시작하면(subscribe) 처음부터 방송이 시작된다. (emit 1,2,3 처럼) —> 이 개념이 Cold Observable이다.

3. Data Flow

  • Control Flow - Goto - if / then / else - switch / case - for / while
  • Data Flow - Stateless - recursion - pipe
  • RxSwift의 핵심 개념은 옵저버블과 데이터 플로우

4. RxSwift 장점

  • 비동기/이벤트의 스트림 - 비동기와 이벤트가 스트림으로 흐른다는 것.

5. 정리

  • flatmap : flatten과 map을 합친 오퍼레이터로 옵저버블을 언래핑해주는 오퍼레이터, Observable에서 발행한 아이템을 다른 Observable로 만들며 발생한 아이템을 구독하며 출력.
  • throttle : 지정한 시간 동안 생긴 옵저버블 아이템 중 마지막 것을 선택해주는 오퍼레이터
  • flatMapFirst : 새로운 Observable를 만들고 새로운 Observable은 동작이 다 끝날 때까지 새로 발행된 아이템을 무시.
  • flatmapLast : 새로운 Observable을 만들고 새로운 Observable이 동작하는 중에 새로 발행된 아이템이 전달되면, 만들어진 Observable은 dispose하고 새로운 Observable을 만듭니다.
  • drive : 에러가 없고 메인스케쥴러에서 사용됨.
  • never Observable을 생성하면 any event를 방출함
  • empty Observable을 생성하면 Completedevent를 방출함
  • just Observable 을 생성하면 단일 이벤트 Observable이 생성된다.
  • of Observable을 생성하면 고정된 크기의 배열의 가지는 Observable이 생성된다.
  • from Observable을 생성하면 Swift의 Array, Dictionary, Set과 같은 순차적 이벤트를 발생하는 Observable을 생성한다.
  • Create 는 Custom Observable을 생성한다.
  • range : 설정한 Range 내의 이벤트를 발생, 설정한 Element로 반복적으로 이벤트를 발생
  • repeatElement : element를 반복설정한 수 만큼 반복시킨다.
  • generate : value를 condition 값이 true일때까지 iterate 한다.
  • deferred : subscribe가 발생할때 observable을 생성한다.
  • error : 아이템을 방출하지 않고 즉시 종료한다.
  • doOn : 로그를 적거나 에러를 출력하거나 완료 여부를 출력하는 코드를 작성할 수 있다.
  • PublishSubject : subscribe 한 후의 이벤트만 emit 한다. 에러 이벤트가 발생하면 그 후의 이벤트를 emit 하지 않는다.
  • BehaviorSubject : subscribe 되기 전 이전 마지막 이벤트 또는 초기값을 emit 한다. 초기화가 반드시 필요하다.
  • ReplySubject : 미리 정해진 사이즈만큼 가장 최근의 이벤트를 새로운 subscribe에게 전달합니다
comments powered by Disqus