Observable
- 실제로 sequence 정의
- subscriber, 즉 구독되기 전까지는 아무런 이벤트도 보내지 않음
- 특정 타입으로 정의되어야 함(ex.
Observable<Any>
)
Observable.empty()
- event 중 completed 만 방출함
그렇다면 언제 사용하나?
1. 즉시 종료할 수 있는 observable을 리턴하고 싶을 때
2. 의도적으로 값을 0개 같은 observable을 리턴하고 싶을 때
Observable.never()
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()
를 호출함