본문 바로가기
RxSwift

[RxSwift] Operator 결정 트리

by 고고 2021. 12. 14.

1. 생성

나는 새로운 Observable을 생성하고 싶은데 그 Observable이

 

특정 항목을 생성해야 한다면: Just

구독 시점에 호출된 Action, Callable, Runnable 또는 그와 유사한 함수 등을 통해 생성된 항목을 리턴해야 한다면: From

지정된 시간 이후에 항목을 배출해야 한다면: Timer

특정 Array, Iterable 또는 유사한 형태의 소스로부터 항목들을 배출해야 한다면: From

퓨처에서 연속된 항목을 가져와야 한다면: From

반복적으로 연속된 항목을 배출해야 한다면: Repeat

사용자가 정의한 로직을 통해 생성되어야 한다면: Create

각각의 옵저버가 Observable을 구독한 후에 생성되어야 한다면: Defer

연속된 정수를 배출해야 한다면: Range

특정 시간 간격별로 항목을 배출해야 한다면: Interval

특정 시간 후에 항목을 배출해야 한다면: Timer

항목 배출 없이 실행을 완료해야 한다면: Empty

아무일도 하지 않아야 한다면: Never

 

2. 결합

다른 Observable을 결합시켜 새로운 Observable을 생성해야 한다

 

순서와 상관없이 전달된 모든 Observable이 가진 항목 전체를 배출해야 한다면: Merge

전달된 Observable의 순서대로 Observable이 가진 모든 항목들을 배출해야 한다면: Concat

각각의 Observable이 항목을 배출 할 때마다 그 항목들을 결합시켜 배출해야 한다면: Zip

Observable 중 하나라도 항목을 배출할 경우에 마지막으로 배출된 항목들을 결합시켜 배출해야 한다면: CombineLatest

그리고 가장 최근에 항목을 배출한 Observable을 통해서만 항목을 배출해야 한다면: Switch

 

3. 변환

Observable이 배출한 항목들을 변환한 후에 다시 배출해야 하는데

 

함수와 함께 항목을 한번에 하나씩 변환 후 배출해야 한다면: Map

해당 Observable이 배출한 모든 항목들을 하나의 Observable이 배출하는 형태로 배출해야 한다면: FlatMap

순서대로 Observable이 배출한 항목들을 연결지어 배출해야 한다면: ConcatMap

앞에서 실행 된 결과를 기반으로 항목을 변환한 후 배출해야 한다면: Scan

항목 배출 전까지 경과한 시간을 가리키는 객체로 변환한 후에 배출해야 한다면: TimeInterval

 

4. 지연

Observable이 항목을 배출하기 전에 항목의 배출 시간을 지연시켜야 한다면: Delay

 

5. Wrapping/Unwrapping

Observable이 배출하는 항목들과 알림들을 다시 항목들로 변환 후 배출해야 하는데

 

이때 배출하는 항목들을 알림 객체로 감싸서(wrapping) 배출해야 한다면: Materialize

이 알림 객체가 다시 풀릴 수(unwrapping) 있다면: Dematerialize

 

 

6. Completed/Error

Observable이 배출하는 모든 객체를 무시하고 completed/error 알림만 전달해야 한다면: IgnoreElements

 

 

7. 처음 항목 추가

Observable이 가진 항목을 그대로를 배출하지만 배출 전에 다른 항목들을 먼저 배출될 수 있도록 추가해야 한다면: StartWith

 

 

8. 버퍼

Observable이 배출하는 항목들을 모아둔 후 버퍼로 다시 배출해야 한다면: Buffer

그 중 마지막에 배출된 항목이 추가된 버퍼만 배출해야 한다면: TakeLastBuffer

 

 

9. Observable 나누기

하나의 Observable을 여러 Observable로 나눠야 한다: Window

 

10. 조회

Observable이 배출한 특정 항목을 조회해야 하는데

 

Observable이 완료되기 전에 마지막으로 배출한 항목을 조회해야 한다면: Last

배출한 첫 번째 항목을 조회해야 한다면: First

 

 

11. 재배출

Observable의 특정 항목만 재배출 해야 하는데

 

어떤 조건을 만족시키지 않는 항목들을 필터링해서 재배출 해야 한다면: Filter

첫 번째 항목만 재배출 해야 한다면: First

처음 몇 개의 항목들만 재배출 해야 한다면: Take

마지막 항목만 재배출 해야 한다면: Last

몇 번째 위치한 항목만 재배출 해야 한다면: ElementAt

 

재배출할 항목들이 처음 몇 개 이후의 것들일 경우

 

처음 몇 개의 항목들 이후의 것들 이라면: Skip

특정 조건을 만족시킨 이후의 것들 이라면: SkipWhile

초기 특정 시간 이후에 배출된 항목들 이라면: Skip

두 번째 Observable이 항목을 배출한 이후의 것들 이라면: SkipUntil

 

마지막 항목 몇 개를 제외한 경우

 

마지막 몇 개 항목을 제외한 것들 이라면: SkipLast

특정 조건을 만족할때 까지의 것들 이라면: TakeWhile

소스 Observable이 완료되기 이전 특정 시간 동안 배출한 것들을 제외한 것이라면: SkipLast

두 번째 Observable이 항목을 배출한 이후에 배출된 것들을 제외한 것이라면: TakeUntil

 

주기적으로 Observable을 샘플링해서 재배출해야 한다면: Sample

특정 시간이 지나고 나서 배출된 항목들만 재배출 해야 한다면: Debounce

만약 중복된 항목이 바로 연이어 배출된다면: DistinctUntilChanged

항목 배출이 시작된 이후에 얼마 동안 구독을 지연시켜야 한다면: DelaySubscription

 

 

12. 첫번째 Observable 재배출

항목들을 배출하는 Observable 컬랙션 중에 첫 번째로 항목을 배출하는 Observable의 항목만 배출해야 한다면: Amb

 

 

13. 평가

Observable이 배출한 연속된 항목 전체를 평가해야 한다

 

배출되는 항목 순서대로 각각에 집계 함수를 적용해서 결과를 배출해야 한다면:Scan

 

 

14. 자료구조

Observable이 배출한 전체 항목들을 특정 자료구조로 배출하고 싶다면 To

 

 

15. 스케줄러

연산자가 특정 스케줄러 상에서 동작해야 한다면: SubscribeOn

연산자가 옵저버한테 알림을 줄 때 동작할 스케줄러를 지정해야 한다면: ObserveOn

 

 

16. 특정 이벤트

특정 이벤트가 발생 할 때 Observable 상에서 어떤 동작을 실행시켜야 한다면: Do

 

 

17. 오류

오류가 발생했을 때 Observable이 옵저버에게 오류를 알려야 하다면: Throw

만약 항목이 배출되지 않은 상태에서 특정 시간이 경과했다면: Timeout

 

 

18. 복구

자연스럽게 Observable을 복구해야 하는데타임 아웃이 발생한 경우

 

백업 Observable로 전환시켜 복구해야 한다면: Timeout

앞에서 발생한 오류 알림으로부터 복구해야 한다면: Catch

이전 Observable에 재구독을 시도해야 한다면: Retry

 

 

19. 리소스 -> Observable

동일한 생명주기를 가진 리소스를 Observable로 생성해야 한다면: Using

 

 

20. 퓨처

Observable을 구독하고 Observable이 완료될 때까지 블로킹 상태에 있는 퓨처(Future)를 전달 받고 싶다면: Start

 

 

21. publish

구독자의 요청 전까지 Observable이 항목을 구독자에게 배포하지 말아야 한다면: Publish

그리고 배출 이후에 구독자가 구독을 시작했다 하더라고 동일하게 배출 순서를 전달해야 한다면: Replay

하지만 모든 구독자가 한번에 구독을 해지할 수 있어야 한다면: RefCount

그리고 배출을 시작하도록 Observable에게 요청해야 한다면: Connect

 

참고

 

 

출처 : http://reactivex.io/documentation/ko/operators.html

 

ReactiveX - Operators

연산자 소개 ReactiveX를 지원하는 언어 별 구현체들은 다양한 연산자들을 제공하는데, 이 중에는 공통적으로 제공되는 연산자도 있지만 반대로 특정 구현체에서만 제공하는 연산자들도 존재한다

reactivex.io

 

'RxSwift' 카테고리의 다른 글

[Rxswift] Operators - To  (0) 2021.12.14
[Rxswift] Operators - 연결(9)  (0) 2021.12.14
[RxSwift] Operators - 수학과 집계(8)  (0) 2021.11.29
[RxSwift] Operators - 조건과 Boolean(7)  (0) 2021.11.29
[RxSwift] Operators - 유틸리티(6)  (0) 2021.11.29

댓글