일상&개발 로그

RxJava Programming 책 스터디 본문

개발/RxJava

RxJava Programming 책 스터디

dskim98 2018. 7. 31. 18:15
  • 데이터 발행자 종류
    - Observable, Single, Maybe, Subject, Completable
  • 데이터 수신자 종류
    - Subscriber, Observer, Consumer

  • 뜨거운 Observable: 구독자가 있든없든 계속 발행하는 Observable ex) 클릭 이벤트, 센서데이터 등등
  • 차가운 Observable: 구독자가 있어야만 발행되는 Observable ex) 웹 요청, DB query, 파일 입출력

  • 데이터 발행자 특징
    • Single: 데이터 발행이 최대 1개 가능함.
    • Maybe: 데이터 발행이 최대 1개 가능하며 데이터 발행 없이도 완료 가능함.
    • Subject: 차가운 Observable을 뜨거운 Observable로 변환해줌.
      • 종류: AsyncSubject, BehaviorSubject, PublishSubject, ReplaySubject
        • AsyncSubject: onComplete호출되기 전 마지막 데이터만 수신받음.
        • BehaviorSubject: default값 or 구독하기 이전에 마지막으로 발행된 값부터 수신 시작함.
        • PublishSubject: 구독하기 시작한 시점 이후부터 발행된 값 부터 수신 시작함.
        • ReplaySubject: 구독하기 이전 발행된 모든 값들을 수신.
    • ConnectableObservable: 차가운 Observable을 뜨거운 Observable로 변환해줌.
      Observable을 publish() 하면 생성되며 connect() 호출 후 데이터 발행됨.


  • 연산자 종류

     연산자

     설명 

     예시 

     생성 연산자(Creating)

     데이터 흐름을 만드는 함수.

     create(), just(), fromArray(), interval(), 

    range(), timer(), defer() 

     변환 연산자(Transforming)

     입력을 받아서 원하는 출력 결과를 반환하는 함수.

     map(), flatMap() 

     필터 연산자(Filter)

     입력 데이터 중 원하는 데이터만 걸러냄. 

     filter(), first(), take() 

     합성 연산자(Combining) 

     Observable을 조합하는 연산자.

     zip(), combineLatest(), merge(), concat() 

     오류 처리 연산자(Error Handling)

     오류를 처리하는 연산자.

     onErrorReturn(), onErrorResumeNext(), retry()

     유틸리티 연산자(Utility) 

     비동기 프로그래밍 지원

     subscribeOn(), observeOn() 

     조건 연산자(Conditional)

     Observable의 흐름 제어

     amb(), takeUntil(), skipUntil(), all() 

     수학과 집합형 연산자

     (Mathematical and Aggregate) 

     수학 함수와 연관된 연산자.

     

     배압 연산자(Back pressure)

     배압 이슈에 대응하는 연산자.

     Flowable



  • RxJava의 람다표현식

     인터페이스 이름 

     포함 메서드

     설명 

     Predicate<T> 

     boolean test(T t) 

     t값을 받아서 참/거짓을 반환. 

     Consumer<T> 

     void accept(T t) 

     t값을 받아서 처리. 반환값은 없음. 

     Function<T, R> 

     R apply(T t) 

     t값을 받아서 결과(R)를 반환. 



  • map()과 flatMap()의 차이
    • map의 경우 인자로 반환 값이 <? extends R> 형태인 Observable을 받지만,
      flatMap의 경우 인자로 반환 값이 (? extends ObservableSource<? extends R>) 형태인 Observable을 받는다.
      즉, map은 반환 값이 Observable이 아닌 Observable을 리턴하고 flatMap은 반환 값이 Observable인 Observable을 리턴한다.
      (flatMap에서 Observable을 합성해서 데이터 형태의 Observable로 결과 값을 받고 싶을때는 resultSelector(BiFunction)을 이용하면 된다.)
  • filter
    • filter 함수와 비슷한 함수들
      • first(default): Observable의 첫 번째 값을 가져옴. 만약 값이 없으면 default값을 가져옴.
      • last(default): Observable의 마지막 값을 가져옴. 만약 값이 없으면 default값을 가져옴.
      • take(N): 처음 N개 값을 가져옴.
      • takeLast(N): 마지막 N개 값을 가져옴.
      • skip(N): 처음 N개 값을 건너뜀.
      • skipLast(N): 마지막 N개 값을 건너뜀.
  • reduce
    • 데이터를 차례대로 모아 처리하는 함수.
      (BiFunction<first value type, second value type. result type>)


# 생성 연산자
  • interval, timer
    • interval의 경우 주기적으로, timer의 경우 한 번 발행한다.
      (다른 스레드에서 동작함 -> API에 @SchedulerSupport(SchedulerSupport.COMPUTATION)이 붙어있음.)
  • range, intervalRange
    • range: 특정 횟수만큼 발행
    • intervalRange: 일정 간격을 두고 특정 횟수만큼 발행.
  • defer
    • 데이터 흐름 생성을 subscribe 호출때까지 미룰 수 있음.
    • subscribe를 다시하면 모든 데이터를 처음부터 다시 다 받을 수 있음.
  • repeat
    • 반복해서 발행함. (그래도 onComplete은 한 번만 호출됨)


# 변환 연산자
  • concatMap
    • flatMap과 유사하지만, concatMap은 먼저 들어온 데이터를 처리하는 도중 새로운 데이터가 들어와도 순서를 보장해준다.
      (인터리빙: 먼저 들어온 데이터를 처리하는 도중 들어온 새로운 데이터 부터 처리하는 것)
  • swithMap
    • flatMap과 유사하지만, 먼저 들어온 데이터를 처리하는 도중 새로운 데이터가 들어오면, 기존 처리하던 것을 취소하고 새로운 데이터만 처리한다.
  • groupBy
    • 데이터를 특정 조건으로 묶음(filter와 함께쓰면 유용)
    • Observable<GroupedObservable>을 반환하기 때문에 잘써야함.
  • scan
    • reduce와 유사하나 scan은 reduce와 달리 데이터가 발행될 때마다 전달함.
    • 그래서 반환형태가 Maybe가 아닌 Observable임.


# 결합 연산자
  • zip, zipWith
    • 다수의 Observable들을 지정한 BiFunction을 이용해서 하나로 병합
  • combineLatest
    • 서로 다른 시점에 데이터를 발행하는 다수의 Observable들의 결과값을 병합
    • 한 Observable에서 새로운 데이터를 발행하면 그 시점 각 Observable의 최신 데이터로 발행함
  • merge
    • 서로 다른 Observable에서 발행된 데이터를 모두 발행함.
  • concat
    • 첫 번째 Observable의 onComplete이벤트가 발생해야 두 번째 Observable을 구독함.


# 조건 연산자
  • amb
    • 둘 중 먼저 나오는 Observable을 채택함.
  • takeUntil(other)
    • other Observable에서 데이터가 발행되기 전까지만 현재 Observable을 구독함.
  • skipUntil(other)
    • other Observable에서 데이터가 발행되는 동안은 현재 Observable에서 발행하는 값을 무시함.
  • all
    • Observable에 입력되는 값이 모두 조건에 맞을 때만 true를 발행함. (조건이 맞지않으면 false를 발행)



Comments