본문 바로가기
Programming Paradigm/RxSwift

'RxSwift 4시간에 끝내기'를 듣고

by 탄이. 2020. 1. 26.


RxSwift 4시간에 끝내기 오프라인 강좌 링크

iamchiwon/RxSwift_In_4_Hours

ReactiveX 공식

ReactiveX

RxSwift Github

ReactiveX/RxSwift

operator 마블 그림으로 볼 수 있는 곳

RxMarbles: Interactive diagrams of Rx Observables

RxSwift 4시간에 끝내기 유투브

RxSwift 4시간에 끝내기 시즌0 - YouTube

  • Moya ('나중에줄게' 를 single로 준다)(Alamofire 다음으로 유행하는 swift 네트워크 라이브러리)
  • Bolts (옵씨 리엑티브 유행)
  • PromiseKit (JS 리엑티브 유행)
  • ipthread : POSIX C API

→ Thread : obj-c, Swift

→ Operation : obj-c, Swift

→ OperationQueue (쓰레드가 너무 많으면 효율이 떨어지기 때문에 ) : 애플이 몇개 만들어놓은 GCD

  • 위와 같은 것을 Concurrency Programming 이라고 한다.
  • 그 중에서 다중 CPU로 한다면 병렬 프로그래밍이다.
  • DispatchQueue
    • serial : main (UI only)
      • sync
      • async
    • concurrency : global
      • sync
      • async

RxSwift를 쓰면 가장 좋은 점! (개인적으로)

  • async를 sync하게 프로그래밍할 수 있다. (사람은 sync하게 생각하기 때문)
  • operator들의 동작흐름을 마블그림으로 시각적으로 이해하기 쉽다.

Observerble

  • ‘나중에줄게’ (PromiseKit - Promise, Bolts - Task, RxSwift - Observerble)
  • ‘나중에오면’ (PromiseKit - .done .catch, Bolts: .continueWith, RxSwift - .subscribe)

Scheduler

  • .observeOn
    • 다음줄부터 적용
  • .subscribeOn
    • 어디서든지 시작시점(subscribe)에 적용됨

Operation

  • rxswift에 있고 bolts, promisekit에 없는 것
  • .zip
    • 네트워크 요청 이쪽과 저쪽의 결과가 다 왔을때 보고자 하는 경우
  • .combineLatest
    • 어느 한쪽이라도 결과가 왔을 때 실행하여 두 결과를 합치고자 할 때 (예: id, pw textfield)
  • .distinctUntilChanged()
    • 데이터가 중복될 때 말고 새로 바뀔 때만 알려줘.
  • rxmarbles 앱
    • ReactiveX operator를 마블 그림으로 볼 수 있는 ios 앱. 데이터를 생성 수정하여 결과를 마블 그림으로 볼수 있다.

Subject

  • ‘나중에줄게’ (PromiseKit - Promise, Bolts - Task, RxSwift - Observerble)
  • ‘나중에오면’ (PromiseKit - .done .catch, Bolts: .continueWith, RxSwift - .subscribe)
  • ‘그걸 밖에서 줄게’ == Subject
  • 외부에서 발생한 데이터를 옵저버블로 넘기고 싶을 때 사용
  • publishSubject
    • 옵저버블 이기도하고 옵저버 이기도 함
  • asyncSubject
    • 예 : detail page에서 ‘좋아요’를 눌렀다 껐다를 반복하는 경우 detail page가 닫힐 때 complete 되어서 데이터를 구독하고 있는 모든 화면에 complete 될 때의 마지막 데이터만 보내줄때 쓴다.
  • BehaviorSubject
    • 기본적으로는 publish와 크게 다르지 않지만 초기 값을 가진 subject
    • subscribe가 발생하면 즉시 현재 저장된 값을 이벤트로 전달한다.
    • 마지막 이벤트 값을 저장하고 싶을 때 사용한다.
  • Variable
    • DEPRECATED! → BehaviorRelay로 대체
    • behavior를 감싸고 있으며, complete, error 가 발생하지 않음
    • 해제될 때 자동으로 complete 호출

Relay

  • iOS에서 UI 이벤트를 구성하기 위해 주의해야 할 점
  1. 에러를 발생시키지 않는다
  2. 메인 스케줄러에서 동작해야 한다
  3. side-effect를 공유한다
  • UI는 에러(혹은 complete)가 나도 끊어지면 안된다 (무시해야 함)!-> 원래는 catchErrorJustReturn(false) 등등 데이터 되돌리기도 해야함-> .asDriver(onErrorJustReturn: false) 한방에 끝

  • UI에서는 Subject 대신에 사용

    • Subject → Relay
    • Observerble → Driver
  • BehaviorRelay

    • Variable (현재 deprecated) → BehaviorRelay
    • behaviorSubject를 한번 더 감싸고 있으며 behaviorSubject와 다른점은 error나 completed 가 발생하지 않는다
    • 해제될 때 자동으로 completed 호출한다
  • disposable : 작업을 취소하는 코드를 넣으면 좋다

  • stream 끝 == 에러(->끝) == completed == disposable되다 == 죽다

  • 옵저버 : emitter, 데이터 만들어 줌(생성)

    • cold observable : subscribe 해야만 실행
    • hot observable : 반대
  • MVVM : ui에 관련된 로직만 따로 뷰모델로 빼면 그게 MVVM

  • side-effect : 다른곳에서 무언가를 처리해야 할 때 .do .subscribe 에서만 한다.

  • 18년 가을 <let us: Go!> advanced Higher-Order function 유투브 영상 (rxswift 보다 깊은 원리를 알고 싶으면)

    let us: Go! 2018 가을 - 세션 6

    20181020 advanced higher-order function

댓글