RX JAVA

Jang Seok Woo·2021년 6월 25일
0

실무

목록 보기
17/136

https://berkbach.com/android-rxjava%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%B0%98%EC%9D%91%ED%98%95-%EA%B5%AC%EA%B5%AC%EB%8B%A8-%EB%A7%8C%EB%93%A4%EA%B8%B0-3d5f30b6db03

RX JAVA는 위의 블로그에서 잘 설명해둬서 이해했다.

비동기식 데이터 처리를 실시간으로 반영하는 프로그래밍?

반응형 프로그래밍을 위해 태어난 언어이다.

반응형이라는게 예를들어, 검색을 '자바'를 검색하려고 하면 'ㅈ'을 먼저 검색어에 친 순간이 있다.
그 순간에는 'ㅈ'에 대한 검색결과를 결과 화면에서 곧 바로 반응하여 띄워주고,

'자'일 때는 '자'에 대한 검색결과를, 실시간으로 바로 반응하는 프로그래밍을 말한다.

반응형 프로그래밍에서 알아둬야할 것이,

1. Observable

rx의 기본적인 단위는 Observable입니다. Observable로부터 발생되는 이벤트는 next, error, complete 세가지 입니다. next는 데이터가 발생되었을 때 호출되며 error는 스트림 처리, 또는 데이터 발생 과정 중 에러가 발생했을때, complete는 Observable에 대한 작업이 끝나고 스트림이 에러없이 정상적으로 닫혔을 때에 호출됩니다.

2. Flowable

Rx2에서는 Flowable이 새롭게 생겼습니다. Observable을 사용하다보면 데이터를 생산하는 속도를 subscribe하여 소비하는 속도를 따라잡지 못하는 경우가 있습니다. 이런 경우에 발생한 데이터가 누락되거나 메모리 부족이 발생합니다. 그래서 기존에는 Observable에 Backpressure Buffer를 두엇고 이 버퍼에 넘치는 데이터를 보관하고 버퍼가 가득찼을 경우 새로운 데이터를 publish 하지 않았습니다.

Flowable에서는 아래의 5 가지의 BackpressureStrategy를 통해 배압 문제를 다룰 수 있습니다.

BUFFER : 처리할 수 없어서 넘치는 데이터를 별도의 버퍼에 저장
DROP : 처리할 수 없어서 넘치는 데이터를 무시(소비자에게 전달x)
LATEST : 넘치는 데이터를 버퍼에 저장하지만 버퍼가 찰 경우 오래된 데이터를 무시하고 최신의 데이터만 유지
ERROR : 넘치는 데이터가 버퍼 크기를 초과하면 MissingBackPressureException에러를 통지
NONE : 특정 처리를 수행하지 않는다.

Observable은 0...N개의 데이터를 발생시킵니다. 하지만 대부분의 복잡하지 않은 비동기 작업들은 보통 1개의 데이터만 발생시키는 경우가 많습니다. 이를 좀더 편리하게 다루기 위해서 RxJava2에서는 Single과 Completable이 등장하게 되었습니다.

3. Single

Single은 Observable의 한 종류로써 무한대의 값을 배출시킬 수 있는 Observable과는 달리 작업을 수행한 뒤에 하나의 데이터만 발생시킬 수 있습니다. 따라서 작업이 성공했을 때 결과값을 배출시키는 onSuccess, 작업이 실패, 에러가 발생했을 때 에러를 배출시키는 onError 두 가지 메소드를 사용할 수 있습니다.

4. Completable

Completable은 별도로 발생시키는 데이터 없이 작업의 성공, 실패 여부만 전파합니다. 따라서 작업이 성공했을 때 성공했을 때 onComplete, 작업이 실패했을 때 onError 두 가지만을 가집니다.

5. Maybe

Maybe는 이름 그대로 값이 배출될수도 있고 배출되지 않을수도 있는 경우에 사용됩니다. Single과 Completable 두 가지가 합쳐졌다고 생각하시면 됩니다. 따라서 성공하여 값이 발생했을 때 onSuccess, 성공하였지만 값이 없을 때 onComplete, 실패했을 때 onError 세 가지를 사용할 수 있습니다.

출처: https://boxfoxs.tistory.com/396 [박스여우 - BoxFox]

profile
https://github.com/jsw4215

0개의 댓글