RxSwift

o2k_iOS·2025년 2월 24일

RxSwift 기본 개념

RxSwiftObservableObserver 의 상호작용을 중심으로 작동합니다

RxSwift , RxCocoa 의 역할

  • RxSwift : 비동기 작업, 데이터 스트림 생성 및 처리
  • RxCocoa : UIKit 컴포넌트와의 데이터 바인딩 및 UI 이벤트 처리

💡 ObservableObserver 간의 상호작용은 RxSwift가 담당하지만. 데이터 바인딩과 UI 관련 처리에는 RxCocoa가 주로 사용된다.

  • Observable’s Life Cycle
    • Observable 생성 방법
      • just → 단일 값을 방출하는 Observable
      • of → 여러 값을 순차적으로 방출하는 Observable
      • from → 배열이나 컬렉션의 요소를 순차적으로 방출하는 Observable
      • create → Custom Observable 생성
    • subscribe → 데이터를 구독하여 처리
    • onNext → 데이터 전달
    • onCompleted / onError → 완료, 에러 처리
    • Dispose → 리소스 해제
  • DisposeBag → 메모리 관리를 위해 사용되며, 구독을 자동으로 해제

Observable

Observable은 데이터를 방출(emit)하는 스트림

시간에 따라 이벤트를 생성하고, 이를 구독(subscribe)하는 Observer가 해당 이벤트를 처리

Observable 생성 예제

  • just → 단일 값을 방출하는 Observable
let observable = Observable.just("Hello, RxSwift!")
observable.subscribe(onNext: { value in
    print(value) // "Hello, RxSwift!"
}).disposed(by: disposeBag)
  • of → 여러 값을 순차적으로 방출하는 Observable
let observable = Observable.of(1, 2, 3)
observable.subscribe(onNext: { value in
    print(value) // 1, 2, 3
}).disposed(by: disposeBag)
  • from → 배열이나 컬렉션의 요소를 순차적으로 방출하는 Observable
let observable = Observable.from([1, 2, 3])
observable.subscribe(onNext: { value in
    print(value) // 1, 2, 3
}).disposed(by: disposeBag)
  • create → Custom Observable 생성
let observable = Observable<String>.create { observer in
    observer.onNext("First Event")
    observer.onCompleted()
    return Disposables.create()
}

observable.subscribe(onNext: { value in
    print(value) // "First Event"
}).disposed(by: disposeBag)

Operators

Observable의 데이터를 변환하거나 필터링하고, 여러 스트림을 결합하는 데 사용

  • 데이터 변환
    • map : 각 데이터 변환
    • flatMap : 데이터 스트림을 다른 Observable로 변환
  • 데이터 필터링
    • filter : 조건에 맞는 데이터만 방출
    • take : take(n) → n개의 데이터만 방출
    • skip: skip(n) → n개의 데이터를 건너뜀
  • 스트림 결합
    • combineLatest : 두 스트림의 최신 값 결합
    • zip : 두 스트림의 값을 순서대로 결합

Schedulers

작업이 실행될 스레드 관리

RxSwift에서 Scheduler는 GCD(Grand Central Dispatch)의 추상화로 볼 수 있으면 작업의 실행 컨텍스트를 정의

  • Main Scheduler
    • 메인 스레드에서 UI 업데이트 작업 처리
  • ConcurrentDispatchQueueScheduler
    • 백그라운드에서 병렬 작업 처리
  • SerialDispatchQueueScheduler
    • 직렬 작업을 처리하면 특정 DispatchQueue에서 실행
  • Scheduler 변경
    • observeOn : 이후의 작업이 실행될 스케쥴러 변경
    • subscribeOn : 구독 시점부터 사용할 스케쥴러 지정
profile
느려도 조금씩 성장

0개의 댓글