ReactiveX 공식문서 읽어보기 1

김성환·2024년 4월 26일

안드로이드에서 비동기 처리라고하면 Thread,Rx,Coroutine 3가지로 나눌수 있습니다.
그중Rx에 대해 말해볼까합니다. Rx는 "Reactive Extensions"의 약자로, 비동기 및 이벤트 기반 프로그래밍을 위한 라이브러리입니다.

이번포스팅에서는 ReactiveX의 공식문서를 읽어보며 어떤기능을 어떻게 제공하는지 알아보도록 합시다

해당그림은 ReactiveX 공식사이트에 들어가면 볼수있는 그림입니다. ReactiveX는 Debounce라는 동작하나로 받은 데이터들을 쉽게 조작할수 있다는것을 보여줍니다.

ReactiveX는 observable 시퀀스를 사용하여 비동기적이고 이벤트 기반 프로그램을 구성하는 라이브러리입니다.
observer 패턴을 확장하여 데이터 및/또는 이벤트 시퀀스를 지원하며, 저수준 스레딩, 동기화, 스레드 안전성, 동시 데이터 구조 및 비차단 I/O와 같은 문제에 대한 고민을 추상화하면서 시퀀스를 선언적으로 조합할 수 있게 하는 연산자를 추가합니다.

Observables는 여러 항목의 비동기 시퀀스에 이상적인 접근 방식으로 간격을 메웁니다.

Why Use Observables?

  • 단숨함과 조립성

ReactiveX는 배열과 같은 데이터 항목의 컬렉션에 사용되는 간단하고 조립 가능한 연산과 비슷한 방식으로 비동기 이벤트 스트림을 처리할 수 있습니다. 이는 복잡한 중첩된 콜백을 필요로하지 않고 코드를 더 읽기 쉽고 버그가 적은 상태로 유지할 수 있도록 돕습니다.

  • 조합성

자바 Future와 같은 기술은 단일 수준의 비동기 실행에 대해 직관적으로 사용할 수 있지만 중첩될 경우 비교적 복잡해집니다. 각 요청의 대기 시간이 실행 중에 다를 때 조건부 비동기 실행 흐름을 최적으로 조합하는 것은 어려울 수 있습니다. 반면 ReactiveX 옵저버블은 비동기 데이터의 흐름과 시퀀스를 조합하기 위해 명시적으로 설계되었으며, 복잡한 실행 흐름을 처리하기에 더 용이합니다.

  • 유연성

ReactiveX 옵저버블은 단일 스칼라 값의 발행 뿐만 아니라 값의 시퀀스나 심지어 무한한 스트림의 발행도 지원합니다. 이는 어떤 사용 사례에도 사용할 수 있는 단일 추상화를 제공합니다. 또한 옵저버블은 이터러블과 관련된 모든 유연성과 우아함을 갖추고 있습니다.

  • 덜 주장적

ReactiveX는 특정한 동시성 또는 비동기성 소스에 편향되어 있지 않습니다. 옵저버블은 스레드 풀, 이벤트 루프, 비차단 I/O, 액터(예: Akka의 액터) 또는 필요에 맞는 다른 구현을 사용하여 구현할 수 있습니다. ReactiveX는 클라이언트 코드가 모든 상호작용을 비동기적으로 다루도록 하며, 구현이 블로킹인지 또는 비블로킹인지, 그리고 구현 방식에 관계없이 작동합니다.

  • 콜백의 문제점
    콜백은 Future.get()에서의 조기 블로킹 문제를 해결하고 응답이 준비되면 실행되므로 자연스럽게 효율적입니다. 그러나 콜백도 단일 수준의 비동기 실행에서는 쉽게 사용할 수 있지만 중첩될 경우 다루기 어려워집니다.

  • 다국어 구현
    ReactiveX는 현재 여러 가지 언어로 구현되어 있으며 해당 언어의 관용구를 존중하는 방식으로 구현됩니다. 더 많은 언어가 빠르게 추가되고 있습니다.

리액티브 프로그래밍

리액티브X는 필터링, 선택, 변환, 결합 및 조합과 같은 연산자들의 모음을 제공하여 옵저버블을 처리할 수 있습니다. 이를 통해 효율적인 실행과 조합이 가능합니다.

terable과 Observable 간의 비슷한 고차 함수가 적용되는 예시 코드를 생각해볼 수 있습니다.

Observable 타입은 Gang of Four의 옵저버 패턴에서 누락된 두 가지 의미를 추가합니다. 이를 통해 Iterable과 일치하는 기능을 제공합니다.

리액티브X는 Iterable과 Observable 타입을 조화시킵니다. 두 타입의 유일한 차이점은 데이터 흐름의 방향입니다. 이는 매우 중요한데, 이제 Iterable에 대해 수행할 수 있는 모든 작업을 Observable에 대해서도 수행할 수 있기 때문입니다


리액티브 프로그래밍은 비동기 데이터 스트림 및 이벤트에 대한 처리를 중심으로 하는 프로그래밍 패러다임입니다. 이는 데이터 스트림을 생성하고 변환하며, 그 스트림에서 발생하는 이벤트를 처리를 도와줍니다. 이러한 리액티브 프로그래밍에서는 Observable이중요하게 사용된다는것을 알수있었습니다.

여기까지 읽어보았을때는 ReactiveX는 자바기준으로 보았을때 비동기처리에 좋은선택지가 될수 있을것으로 보입니다. 그렇지만 코틀린의 경우 flow나 LiveData같이 관찰가는한 객체를 만들수도있고 비동기처리에는 coroutine을 사용할수도있습니다. 그렇다면 굳이 Rx를 선택지로 선택해야하는 이유가 있을까요?

이는 개발자의 선택지에 따라 다를것 같습니다. 개발자가 코루틴에 익숙하다면 코루틴을 Rx가 더 익숙하다면 Rx선택할것입니다. 개발자는 선택지가 늘어났다는것에 중점을두는것이 좋을것 같습니다.


reference
https://reactivex.io/
https://reactivex.io/intro.html

0개의 댓글