Observable은 이벤트 시퀀스를 비동기적으로 생성한다. Observable이 지속적으로 이벤트를 발생시키는 것을 emit이라고 한다.
Observable이 방출할 수 있는 이벤트들로는 다음 3가지가 있다.
next
: 최신 값을 방출하는 이벤트error
: observable이 값을 방출하다 에러가 발생하면 error를 방출하고 종료시키는 이벤트complete
: 성공적으로 이벤트 시퀀스를 종료시키는 이벤트just
는 오직 하나의 요소를 포함하는 시퀀스를 생성한다.let observable: Observable<Int> = .just(1)
of
는 주어진 값들을 가지고 시퀀스를 생성한다.let observable = Observable.of(1, 2, 3) // Observable<Int>
let observable = Observable.of([1, 2, 3]) // Observable<[Int]>
from
은 배열의 요소들로 시퀀스를 생성한다.let observable = Observable.from([1, 2, 3])
Observable<String>.create({ (observer) -> Disposable
observer.onNext("1")
observer.onCompleted()
observer.onNext("2")
return Disposables.create()
})
이 때 2가 들어가는 이벤트는 complete 이후이기 때문에 방출되지 않는다.
Observable은 그저 시퀀스일 뿐이다. subscribe가 되기 전에는 아무런 이벤트를 방출하지 않는다.
.subscribe()
는 escaping 클로저로 Event를 갖는다. escaping에 대한 리턴값은 없으며 Disposable을 반환한다.
onNext
, onError
, onCompleted
, onDisposed
를 통해 이벤트를 다룰 수 있다.
Observable이 subscribe 되면 이벤트 방출을 시작하는 반면, disposing이 되면 종료된다.
.dispose()
: Observable 구독을 취소DisposeBag()
: 각각의 구독에 대해서 일일이 관리하는 것은 효율적이지 못함.Trait는 일반적인 Observable보다 좁은 범위의 Observable이다.
무한한 이벤트 스트림이 아닌 하나의 결과, 에러를 처리하고자 할 때 사용한다.
success(value)
또는 error
만 방출
success(value)
는 next
와 completed
이벤트의 조합
HTTP 요청처럼 한 번의 응답, 에러를 처리할 때 사용
결과값이 필요하지 않고 완료만 의미 있는 모델에서 사용
completed
또는 error
만 방출
연산이 성공적으로 완료되었는지 확인하고 싶을 때 사용
Single과 Completable의 중간 포지션
success(value)
, completed
, error
를 방출
Observable을 asMaybe()
를 통해 변형 가능
생성과 동시에 이벤트를 방출하기 시작하는 Observable. Subscribe되는 시점과 상관없이 Observer에게 이벤트를 중간부터 방출한다.
Subscribe 되는 시점부터 이벤트를 생성해 방출한다.
Observable인 동시에 Observer이다. Subject를 사용하면 Cold Observable을 Hot Observable로 변환할 수 있다.
subscribe 된 이후부터 이벤트를 방출한다.
dispose되거나 completed, error 이벤트를 통해 Subject가 종료될 때 까지 이벤트를 방출한다.
종료되었을 때 존재하는 구독자 뿐만 아니라 이후에 구독한 subscriber에게도 종료 이벤트를 방출한다.
subscribe 되기 이전의 값이 필요 없는 경우에 사용한다.
초기 이벤트를 가진 Subject이다. subscribe될 때 가장 최신의 next 이벤트를 전달한다.
초기값이 무조건 필요하다.
유저 프로필과 같이 항상 최신 데이터가 필요한 경우에 사용한다.
buffer size 개의 이벤트를 저장해 subscribe 될 때 저장된 이벤트를 모두 방출한다.
최근 검색어와 같이 최신의 여러 값들을 보여주고 싶을 때 사용한다.
Subject와 다르게 error나 complete를 통해서 종료되지 않는다
subscribe하고 싶을 때는 .asObservable()
을 사용한다.
PublishSubject를 wrapping해서 가지고 있다.
dispose되기 전까지 계속 작동하기 때문에 UI Event에서 사용하기 적절하다.
BehaviorSubject를 wrapping해서 가지고 있다.
.value
를 사용해 현재의 값을 꺼낼 수 있다.
단, value
는 get-only-property이므로 value의 값을 변경하기 위해서는 .accept()
를 사용한다.