본문 바로가기

Study

RxJava 공부 정리 - 3

개인적으로 공부하면서 정리한 내용입니다. 모든 내용을 포함하지 않고 1차로 전체적인 내용 공부를 먼저 하고, 2차로 다시 정리한 내용이기 때문에 누락된 개념들이 많습니다.

 


생성 연산자

데이터의 흐름을 만듦

 

 

interval() 함수

  • 일정 시간 간격으로 데이터 흐름을 생성함.
  • 주어진 시간 간격으로 Long 객체를 발행함.
  • public static Observable<Long> interval(long period, TimeUnit unit) -> 일정 시간 쉬었다가 데이터를 발행함.
  • public static Observable<Long> interval(long initialDelay, long period, TimeUnit unit) -> 동작 시간은 같고 최초 지연 시간을 조절할 수 있음. 초기 지연 시간 없이 바로 데이터를 발행하기 위해 사용함.
  • 영원히 지속 실행되기 때문에 폴링 용도로 많이 사용함.

timer() 함수

  • 한 번만 실행하는 함수.
  • 일정 시간이 지난 후 한 개의 데이터를 발행하고 onComplete() 이벤트 발생.
  • 현재 스레드가 아닌 계산 스케줄러에서 실행됨.

range() 함수

  • 주어진 값부터 m개의 integer 객체를 발행함.
  • interval(), timer() 함수는 Long객체를 발행했지만 range() 함수는 Integer 객체를 발행함.
  • 현재 스레드에서 실행함.
  • 반복문을 대체할 수 있음.

intervalRange() 함수

  • interval()과 range()를 혼합해놓음.
  • interval() 함수처럼 일정한 시간 간격으로 값을 출력하지만 range() 함수처럼 시작 숫자로부터 m개만큼의 값만 생성하고 onComplete 이벤트를 발생함. -> interval() 계속 데이터 흐름을 발행하지 않음.

defer() 함수

  • 데이터 흐름 생성을 구독자가 subscribe() 함수를 호출할 때까지 미룰 수 있음. (이때 새로운 Observable이 생성됨)
  • subscrive() 함수를 호출할 때의 상황을 반영하여 데이터 흐름의 생성을 지연하는 효과를 보여줌.
  • 내부적으로 구독자가 subscibe()를 호출하면 그 때 supplier의 call() 메서드를 호출함.

repeat() 함수

  • 서버가 잘 살아있는지 확인이 필요할 때 사용.
  • 인자를 입력하지 않으면 영원히 반복 실행.
  • repeat(N)을 사용하면 N번 만큼만 반복 실행 됨.

 


변환 연산자

만들어진 데이터 흐름을 원하는 대로 변형할 수 있는 변환 연산자.

 

 

concatMap() 함수

  • flatMap() 함수는 인터리빙이 나타날 수 있지만 concatMap() 함수는 먼저 들어온 데이터 순서대로 처리해서 결과를 낼 수 있도록 보장함.

switchMap() 함수

  • 순서를 보장하기 위해 기존에 진행 중이던 작업을 바로 중단함.
  • 여러 개의 값이 발행되었을 때 마지막에 들어온 값만 처리하고 싶을 때 사용함. 마지막 데이터의 처리는 보장됨.

groupBy() 함수

  • 어떤 기준으로 단일 Observable을 여러 개로 이루어진 Observable그룹으로 만듦.

scan() 함수

  • reduce() 함수와 비슷
  • 실행할 때마다 입력값에 맞는 중간 결과 및 최종 결과를 구독자에게 발행함.

 


결합 연산자

여러개의 Observable을 조합하여 활용함.

 

 

zip() 함수

  • 각각의 Observable을 모두 활용해 2개 혹은 그 이상의 Observable을 결합함.
  • 각각의 Observable에서 모두 데이터를 발행해야 결합할 수 있음. 그 전까지는 발행을 기다림.

combineLatest() 함수

  • 2개 이상의 Observable을 기반으로 Observable 각각의 값이 변경되었을 때 갱신해주는 함수.
  • 마지막 인자로 들어가는 combiner가 각 Observable을 결합해서 결과를 만들어 줌.

merge() 함수

  • 단순 결합 함수.
  • 어느 것이든 업 스트림에서 먼저 입력되는 데이터를 그대로 발행함.

concat() 함수

  • 2개 이상의 Observable을 이어 붙여주는 함수.
  • 첫 번째 Observable에 onComplete 이벤트가 발생해야 두 번째 Observable을 구독함.
  • 첫 번째에서 onComplete 이벤트가 발생하지 않으면 두 번째 Observable은 계속 대기 하기 때문에 잠재적인 메모리 누수 위험이 있음.

 


조건 연산자

Observable의 흐름을 제어하는 역할.

지금까지의 흐름을 어떻게 제어할 것인지에 초점이 있음.

 

 

amb() 함수

  • 가장 먼저 데이터를 발행하는 Observable을 선택. 이후 나머지 데이터는 모두 무시.

takeUntil() 함수

  • take() 함수에 조건을 설정할 수 있음. 
  • 인자로 받은 Observable에서 어떤 값을 발행하면 현재 Observable의 데이터 발행을 중단하고 onComplete 발생

skipUntil() 함수

  • Observable에서 데이터를 발행할 때까지 값을 건너 뒴.
  • other Observable에서 화살표가 나올 때까지 값을 발행하다 값을 발행하는 순간부터 원래 Observable에서 값을 발행하기 시작.

all() 함수

  • 주어진 조건에 무조건 맞을 때만 true 값을 발행하고 조건에 맞지 않는 데이터가 발행되면 false를 발행.

 


수학연산자

 

count()

max()

min()

sum()

average()

 

delay() 함수

  • 유틸리티 연산자로서 보조 역할을 함.
  • 인자로 전달 받는 time과 시간단위 만큼 입력받은 Observable의 데이터 발행을 지연 시켜줌.

timeinterval() 함수

  • 어떤 값을 발행했을 때 이 전 값을 발행한 이후 얼마나 시간이 흘렀는지를 알려 줌.

 

 

 

'Study' 카테고리의 다른 글

영국 런던에서 열린 ASOS 기술 세미나 참여 후기(ft. Londroid)  (0) 2020.02.24
RxJava 공부 정리 - 3  (0) 2019.10.13
RxJava 공부 정리 - 2  (0) 2019.07.17
RxJava 공부 정리  (0) 2019.07.16