[RxSwift] Transforming Operators

RudinP·2025년 9월 29일
0

Study

목록 보기
362/363

toArray

  • 원본 옵저버블이 방출하는 모든 요소를 하나의 배열(Single)로 방출
  • 소스 옵저버블이 방출하는게 더 이상 없는 시점에서 구독자에게 전달

map

  • 원본 옵저버블이 방출하는 요소를 대상으로 함수를 실행하고 결과를 새로운 옵저버블로 리턴하는 연산자
  • 클로저로 전달되는 파라미터의 형식은 소스 옵저버블이 방출하는 형식과 동일, 리턴값은 제약 X

compactMap

  • 옵저버블이 방출하는 이벤트에서 값을 꺼내고 옵셔널 형태로 바꾸고 원하는 변환을 실행
  • nil을 필터링(전달하지 않는다)

  • filter을 통해 nil을 거를 수는 있지만 optional로 전달되어 unwrapping이 요구됨

1. filter와 map을 사용

2. compactMap 사용

flatMap

  • 개별 이벤트를 독립된 inner Observable로 변환, 다시 result Observable로 합쳐지는 평탄화(flatenning) 과정
  • result Observable 방출 시 지연없이 방출 ( Interleaving )

interleaving

flatMapFirst

  • 가장 먼저 이벤트를 방출한 이너 옵저버블에서만 이벤트를 방출하는 연산자

  • flatMapFirst에는 주기가 있으며, 각 주기마다 가장 먼저 이벤트를 방출하는 inner Observable만 채택
  • green circle은 주기가 겹침 -> red circle만 방출됨
  • blue circle은 주기가 끝난 후 시작 -> 다음 주기의 첫번째 이벤트로 인식되어 방출

flatMapLatest

  • 가장 최근 inner Observable에서만 이벤트를 방출
  • 새로운 inner observable 생성시 기존 inner observable 바로 제거

concatMap

  • flatMap과 다르게 interleaving을 허용하지 않음
  • 항상 방출 순서를 보장
  • 원본 옵저버블이 이벤트를 방출하는 순서 == 이너 옵저버블 방출 순서
  • 한 번에 한 옵저버블만 이벤트를 방출 -> interleaving x

scan

  • accumulator function을 활용하는 연산자
  • 옵저버블이 방출하는 항목을 대상으로 accumulator closure을 실행한 다음, 결과를 옵저버블로 리턴.
  • 클로저가 리턴한 값은 이어서 실행하는 클로저의 첫번째 파라미터로 전달된 후 실행
  • 작업 결과를 누적시키며, 중간결과와 최종결과가 모두 필요한 경우 사용

buffer

  • Controlled Buffering 구현에 사용
    • 특정 주기동안 Observable이 방출하는 값을 수집하고 하나의 배열을 방출하는 옵저버블로 리턴

  • timeSpan마다 수집된 항목을 즉시 방출
  • count 수만큼 수집되지 않았더라도 즉시 방출
  • 시간 상 오차 발생 가능

  • 수집된 항목이 count수만큼 되었다면 timeSpan에 도달하지 않았어도 즉시 방출

window

  • Buffer연산자처럼 timeSpanmaxCount를 지정해서 원본 옵저버블이 방출하는 항목들을 작은 단위의 옵저버블로 분해
  • 수집된 항목을 옵저버블로 방출하는 옵저버블(inner Observable)을 리턴 (buffer은 배열로 리턴)
  • 이외에는 Buffer와 동일하게 시간 오차가 존재하며, count수만큼 수집되었다면 timeSpan에 도달하지 않았어도 즉시 방출

groupBy

  • 방출되는 요소를 조건에 따라 그룹핑
  • 그룹핑된 옵저버블로 방출

  • 사용할땐 보통 flatMap, toArray를 통해 그룹핑된 최종 결과를 하나의 배열로 방출하도록 구현
profile
iOS 개발자가 되기 위한 스터디룸...

0개의 댓글