[RxSwift] Observable

홍시·2022년 4월 20일
0

Rxswift

목록 보기
1/1

Observable

  • 실제로 sequence 정의
  • subscriber, 즉 구독되기 전까지는 아무런 이벤트도 보내지 않음
  • 특정 타입으로 정의되어야 함(ex. Observable<Any> )

Observable.empty()

  • event 중 completed 만 방출함
    그렇다면 언제 사용하나?
    1. 즉시 종료할 수 있는 observable을 리턴하고 싶을 때
    2. 의도적으로 값을 0개 같은 observable을 리턴하고 싶을 때

Observable.never()

  • 어떤 event도 방출하지 않음

Observable.deferred

  • Observer가 구독될 때까지 이벤트를 방출하지 않으며, 각 Observer에게 새로운 Observable을 리턴
  • 실제 Observable이 만들어지는 시점이 미뤄진다고해서 deferred
    언제 사용하나?
    상태에 따라 다른 데이터를 처리할 때 사용

Traits

일반적인 Observable보다 좁은 의미로 사용 가능

  • Single
    • 이벤트:
      .success(value) .error(error)
    • .success == next + completed event를 합친 것
    • 사용: 성공 또는 실패로 끝날 수 있는 일회성 프로세스
  • Completable
    • 이벤트:
      completed error(error) 이외에 어떤 값도 방출하지 않음
    • 사용: 연산이 제대로 완료되었는지만 확인하고 싶을 때 (ex. 파일쓰기)
  • Maybe
    • == Single + Completable
    • 이벤트:
      .success(value) completed error(error)
    • 사용: 프로세스 성공, 실패 여부와 더불어 출력된 값도 내뱉을 수 있을 때


Dispose

  • 구독을 취소하면 Observable 수동 종료 가능
  • Observable에 subscribe operator 는 disposable을 리턴해야하므로 Disposables.create() 를 사용해야함
  • .dispose() 를 통해 구독 취소 가능
  • dispose를 하지 않으면 메모리 누수 발생

DisposeBag

  • 각각의 구독에 대해 관리하는 것은 효율적이지 못해 DisposeBag 타입을 이용
  • DisposeBag에 .disposed(by:) 메소드를 통해 추가된 disposables을 가지고 있음
  • disposable은 disposeBag이 할당해제되려고할 때 각각 dispose() 를 호출함
profile
# iOS

0개의 댓글