티스토리 뷰
Flowable 과 Observable의 비교
Flowable
- Reactive Streams 인터페이스를 구현함
- Subscriber에서 데이터를 처리함
- ReactiveStreams에서 기본스펙으로 정해놓은 인터페이스
- 데이터 개수를 제어하는 배압기능이 있음
- Subscription으로 전달 받는 데이터 개수를 제어할 수 있음
- Subscription로 구독을 해지
Observable
- Reactive Streams 인터페이스를 구현하지 않음
- Observer에서 데이터를 처리함
- RxJava 에서 독자적으로 제공하는 클래스
- 데이터 개수를 제어하는 배압기능이 없음
- 배압 기능이 없기때문에 데이터 개수를 제어할 수 없음
- Disposable로 구독을 해지
배압 (Back Pressure) 이란 ?
Flowable에서 데이터를 통지하는 속도가 Subscriber에서 통지된 데이터를 전달 받아 처리하는 속도보다 빠를때 밸런스를 맞추기 위해 데이터 통지량을 제어하는 기능
배압 전략(BackpressureStrategy)
Rxjava에서는 BackpressureStrategy를 통해 Flowable 이 통지 대기 중인 데이터를 어떻게 다룰지에 대한 배압 전략을 제공
MISSING 전략
- 배압을 적용하지 않는다
- 나중에 onBackpressureXXX()로 배압 적용을 할 수 있다
ERROR 전략
- 통지된 데이터가 버퍼의 크기를 초과하면 MissingBackpressureException 에러를 통지한다.
- 즉, 소비자가 생산자의 통지 속도를 따라 잡지 못할때 발생한다.
BUFFER 전략
- DROP_LATEST
- 버퍼가 가득찬 시점에 버퍼 내에서 가장 최근에 버퍼로 들어온 데이터를 DROP 함
- DROP 된 빈 자리에 버퍼 밖에서 대기하던 데이터를 채움
- DROP_OLDEST
- 버퍼가 가득찬 시점에 버퍼 내에서 가장 오래전에 (먼저) 버퍼로 들어온 데이터를 DROP 함
- DROP 된 빈 자리에 버퍼 밖에서 대기하던 데이터를 채움
DROP 전략
- 버퍼에 데이터가 모두 채워진 상태가 되면 이후에 생성되는 데이터를 버리고(DROP), 버퍼가 비워지는 시점에 DROP 되지 않은 데이터부터 다시 버퍼에 담는다.
LATEST 전략
- 버퍼에 데이터가 모두 채워진 상태가 되면 버퍼가 비워질 때까지 통지된 데이터는 버퍼 밖에서 대기하며 버퍼가 비워지는 시점에 가장 나중에(최근에) 통지된 데이터부터 버퍼에 담는다.
출처 : 인프런 (Kevin의 알기쉬운 RxJava)
Kevin의 알기 쉬운 RxJava 1부 강의 | Kevin - 인프런
Kevin | 리액티브 프로그래밍이라는 진입 장벽을 넘고 싶으신가요? Kevin의 알기 쉬운 RxJava가 그 벽을 넘을 수 있는 힘을 키워드리겠습니다., 리액티브 프로그래밍, 알기 쉽고 확실하게 배워보세요!
www.inflearn.com
'RxJava' 카테고리의 다른 글
[리액티브(Reactive) 프로그래밍] 데이터 결합 연산자 (0) | 2024.12.16 |
---|---|
[리액티브(Reactive) 프로그래밍] 에러 처리 연산자 (0) | 2024.12.16 |
[리액티브(Reactive) 프로그래밍] 자바에서의 함수형 프로그래밍 기본 지식 (0) | 2024.12.12 |
[리액티브(Reactive) 프로그래밍] Single, Maybe, Completable (0) | 2024.12.12 |
[리액티브(Reactive) 프로그래밍] 리액티브 스트림즈(Reactive Streams) (1) | 2024.12.12 |