[RxSwift] Operators

CastleSilver·2023년 4월 23일
0

Reactive X

목록 보기
3/7
post-thumbnail

ReactiveX는 각 언어에서 연산자(operator) 집합을 구현합니다. 언어끼리 중복되는 연산자도 있지만 특정 언어에서만 구현된 연산자도 존재합니다.

Chaining Operators

대부분의 연산자는 Observable을 동작시키고 Observable을 반환합니다. 이를 통해 연산자를 연쇄적으로 적용할 수 있습니다.

연산자 체인은 이전 연산자에서 생성된 Observable에서 독립적으로 작동하지 않고 연속적으로 작동합니다. 즉, 체인의 처음에 있는 Observable에 독립적으로 작용하는 것이 아니라, 직전 연산자에서 반환된 Observable에서 동작합니다. 따라서 연산자 체인에서는 연산자의 순서가 중요합니다.

Observable 연산자 체인은 Builder 패턴과 같은 다른 패턴과 유사하게 메서드를 연결할 수 있습니다. 그러나 Builder 패턴에서는 체인에 나열된 메서드의 순서가 중요하지 않지만, Observable 연산자에서는 순서가 중요합니다.

Operator 종류

Observable 생성

  • Create: observer 메서드를 프로그래밍 방식으로 호출하여 Observable을 처음부터 생성합니다.
  • Defer: observer가 구독하기 전까지 Observable을 생성하지 않으며, 각 구독마다 새로운 Observable을 생성합니다.
  • Empty/Never/Throw: 매우 정확하고 제한된 동작을 가진 Observable을 생성합니다.
  • From: 다른 객체나 데이터 구조를 Observable로 변환합니다.
  • Interval: 특정 시간 간격으로 분리된 정수 시퀀스를 방출하는 Observable을 생성합니다.
  • Just: 객체 또는 일련의 객체를 Observable로 변환하여 해당 객체 또는 객체를 방출합니다.
  • Range: 연속적인 정수 범위를 방출하는 Observable을 생성합니다.
  • Repeat: 특정 항목이나 항목 시퀀스를 반복하여 방출하는 Observable을 생성합니다.
  • Start: 함수의 반환 값을 방출하는 Observable을 생성합니다.
  • Timer: 주어진 지연 시간 후에 단일 항목을 방출하는 Observable을 생성합니다.

변환 연산자

  • Buffer: Observable에서 주기적으로 항목을 묶어서 이를 번들로 방출합니다.
  • FlatMap: Observable에서 방출되는 항목을 Observable로 변환하고, 이러한 Observable에서 방출되는 항목을 단일 Observable로 방출합니다.
  • GroupBy: 하나의 Observable을 키로 구분되는 그룹의 항목을 방출하는 여러 개의 Observable 집합으로 분할합니다.
  • Map: Observable에서 방출되는 각 항목에 함수를 적용하여 항목을 변환합니다.
  • Scan: Observable에서 방출되는 각 항목에 함수를 순차적으로 적용하고, 각 연속 값마다 방출합니다.
  • Window: Observable에서 항목을 주기적으로 Observable windows로 분할하여 이러한 windows을 방출하고, 항목을 하나씩 방출하는 대신 이러한 windows을 방출합니다.

필터링 연산자

  • Debounce: Observable에서 특정 시간 간격 내에 다른 항목을 방출하지 않으면 항목을 방출합니다.
  • Distinct: Observable에서 중복 항목을 방출하지 않도록 합니다.
  • ElementAt: Observable에서 n번째 항목만 방출합니다.
  • Filter: 조건 테스트를 통과하는 Observable에서만 항목을 방출합니다.
  • First: Observable에서 첫 번째 항목 또는 조건을 만족하는 첫 번째 항목만 방출합니다.
  • IgnoreElements: Observable에서 항목을 방출하지 않지만 종료 알림을 반영합니다.
  • Last: Observable에서 마지막 항목만 방출합니다.
  • Sample: 일정한 시간 간격으로 Observable에서 가장 최근에 방출된 항목을 방출합니다.
  • Skip: Observable에서 처음 n개의 항목을 방출하지 않습니다.
  • SkipLast: Observable에서 마지막 n개의 항목을 방출하지 않습니다.
  • Take: Observable에서 처음 n개의 항목만 방출합니다.
  • TakeLast: Observable에서 마지막 n개의 항목만 방출합니다

결합 연산자

  • And/Then/When: Pattern 및 Plan 중개자를 통해 두 개 이상의 Observable에서 방출된 항목 세트를 결합합니다.
  • CombineLatest: 두 개의 Observable 중 하나에서 항목이 방출되면 지정된 함수를 사용하여 각 Observable에서 가장 최근에 방출된 항목을 결합하고 이 함수의 결과를 기반으로 항목을 방출합니다.
  • Join: 다른 Observable에서 방출된 항목이 다른 Observable에서 정의된 시간 범위 내에 방출되면 두 Observable에서 방출된 항목을 결합합니다.
  • Merge: 여러 개의 Observable을 하나로 병합하여 항목을 결합합니다.
  • StartWith: 원본 Observable에서 항목을 방출하기 전에 지정된 일련의 항목을 방출합니다.
  • Switch: Observable에서 방출되는 Observable을 단일 Observable로 변환하여 최근에 방출된 Observable에서 방출된 항목을 방출합니다.
  • Zip: 지정된 함수를 사용하여 여러 Observable에서 방출되는 항목을 결합하고 이 함수의 결과에 따라 각 조합에 대한 단일 항목을 방출합니다.

에러처리 연산자

  • Catch: onError 알림에서 복구하여 오류 없이 시퀀스를 계속합니다.
  • Retry: 소스 Observable이 onError 알림을 보내면 다시 구독하여 오류 없이 완료되기를 기대합니다.

유용한 연산자

  • Delay: Observable에서 방출되는 항목을 특정 시간만큼 이후로 이동시킵니다.
  • Do: Observable 라이프사이클 이벤트에서 실행할 작업을 등록합니다.
  • Materialize/Dematerialize: 발행된 항목과 전송된 알림을 모두 발행된 항목으로 나타냅니다.
  • ObserveOn: 구독자가 이 Observable을 구독할 스케줄러를 지정합니다.
  • Serialize: Observable이 직렬화된 호출을 수행하도록 하여 잘 동작하도록 강제합니다.
  • Subscribe: Observable에서 방출된 항목 및 알림에 대해 작업을 수행합니다.
  • SubscribeOn: Observable이 구독될 때 사용할 스케줄러를 지정합니다.
  • TimeInterval: 항목을 방출하는 Observable을 시간 간격을 표시하는 Observable로 변환합니다.
  • Timeout: 소스 Observable을 반영하지만 일정 시간 내에 방출된 항목이 없으면 오류 알림을 내보냅니다.
  • Timestamp: Observable에서 방출된 각 항목에 타임스탬프를 추가합니다.
  • Using: Observable과 수명이 같은 일회용 리소스를 만듭니다.

조건, Bool 연산자

  • All: Observable에서 방출된 모든 항목이 특정 기준을 충족하는지 확인합니다.
  • Amb: 두 개 이상의 원본 Observable에서 가장 먼저 항목을 방출하는 Observable에서 모든 항목을 방출합니다.
  • Contains: Observable이 특정 항목을 방출하는지 여부를 확인합니다.
  • DefaultIfEmpty: 소스 Observable에서 항목이 방출되지 않으면 기본 항목을 방출합니다.
  • SequenceEqual: 두 Observable이 동일한 항목 시퀀스를 방출하는지 여부를 확인합니다.
  • SkipUntil: 두 번째 Observable에서 항목이 방출됩니다.

산술, 결합 연산자

  • Average: Observable이 내보낸 숫자의 평균을 계산하고 이 평균을 내보냅니다.
  • Concat: 둘 이상의 Observable을 결합하여 배출합니다.
  • Count: Observable이 내보낸 항목 수를 세고 내보냅니다.
  • Max: Observable이 내보낸 최대값 항목을 내보냅니다.
  • Min: Observable이 내보낸 최소값 항목을 내보냅니다.
  • Reduce: Observable이 내보낸 각 항목에 함수를 순차적으로 적용하고 최종 값을 내보냅니다.
  • Sum: Observable이 내보낸 숫자의 합을 계산하고 이 합계를 내보냅니다.

배압 연산자

배압이란 옵저버블의 생산속도를 옵저버의 소비가 따라가지 못해서 데이터가 쌓이는 현상을 말한다.

  • backpressure operators: 옵저버가 소비하는 것보다 더 빠르게 항목을 생성하는 옵저버블에 대처하기 위한 전략

연결가능한 옵저버블 연산자

  • Connect: 연결 가능한 Observable에게 구독자에게 항목 방출을 시작하도록 지시합니다.
  • Publish: 일반 Observable을 연결 가능한 Observable로 변환
  • RefCount: 연결 가능한 Observable이 일반 Observable처럼 동작하도록 합니다.
  • Replay: Observable이 항목 방출을 시작한 후에 구독하더라도 모든 관찰자가 방출된 항목의 동일한 시퀀스를 볼 수 있도록 합니다.

Observable을 변환하는 연산자

  • To: Observable을 다른 객체 또는 데이터 구조로 변환
profile
우당탕탕 비전공자 개발자

0개의 댓글