BigJeon Android 개발 블로그

ReactiveX에 대하여(ex - RX_JAVA, RX_Kotlin) 본문

안드로이드(기술)

ReactiveX에 대하여(ex - RX_JAVA, RX_Kotlin)

Big-Jeon 2024. 8. 27. 15:51
반응형

평소 Observer패턴, Coroutine등을 사용은 하였지만 문득 필자는 해당 기능들이 RxKotlin을 통해 제공이 되는데 RxKotlin은 뭐지? 라는 궁금증이 생겼고 이 궁금증을 해소 하기 위한 포스팅을 써볼까 한다.

 

채용 시장을 바라보다 보면 다음과 같은 문구를 많이 볼 수 있다

1. 반응형 UI를 구성해본 경험
2. RXjava, RXkotlin 사용 가능 자
3. Observable 패턴 구현 가능자

 

위의 문구들을 결국 ReactiveX를 사용 가능 해봤는지 아닌지를 물어보는 질문이다.

 

그렇다면 ReactiveX는 무엇인지, 어떠한 기능들이 있는지, 사용 목적은 무엇인지 하나하나 알아보도록 하자.

 

1. ReactiveX 언어 목록

우선 ReactX에는 다음과 같은 목록이 있다.

ReactiveX 지원 언어 목록

이를 통해 우리는 RxJava, RxKotlin이 같은 개념으로 개발되었고, 지원한다는 것을 알 수 있다.(필자의 경우 Android개발을 주로 하고 있기에 나머지 언어는 참고만 하기 바란다.)

 

그렇다면 ReactiveX는 어디서 나타났고 무엇을 위해 나타났는지 알아 보도록 하자.

 

2. ReactiveX 탄생 배경

우리가 새로운 제품을 구매했을때 해당 제품의 사용방법, 제공 기능 등을 알기 위해서는 뭐니뭐니해도 설명서를 보는게 최고이다.

이처럼 모든 개발 관련 기술, 라이브러리 등에는 설명서(Introductions, Docs등)가 존재한다.

그렇다면 ReactiveX의 공식 문서를 한번 봐보도록 하자.

필자는 영어를 잘하지 못하기에 한글로 번역된 것을 보도록 하겠다.(오번역 주의)

역시...

가장 첫줄에 ReactiveX의 중요 포인트가 등장한다.

ReactiveX는 관찰 가능한 시퀀스를 사용하여 비동기 및 이벤트 기반 프로그램 작성 라이브러리이다.

음...이 한줄로 ReactiveX를 사용 또는 제공하는 목적을 알 수 있다.

하지만 우린 왜 이러한 라이브러리를 제공 하고자 하였는지 까지는 알아 보려고 한다.

 

해당 내용은 우리는 이 이유에 의해서 ReactiveX를 만들어요! 라고 정리되어있는 공식 문서는 없었다.

따라서 필자가 타 블로그글을 통해 알게 된 사실을 간략하게만 풀어볼까 한다.(읽어볼 사람은 참고 링크를 올려 둘테니 읽어보길 바란다.)

 

1. ReactiveX의 본래 프로젝트 명은 Volta였다.(2007년 12월, 마이크로 소프트) / 로고가 같음

2. 모종의 사유로 인해 Volta프로젝트는 무산 되었지만, 해당 프로젝트의 일부분을 Reaxtive Extention이라는 프로젝트로 분리하여 개발을 하였다.개발 당시 제공 기능 목적은 다양한 기술을 하나의 프레임워크 안에서 제공 하기 위해 개발하였고, 이를 지원하기 위해서는 필연적으로 비동기 로직 처리를 쉽게 할 수 있도록 기능을 제공 했어야만 했다.

3.2009년11월 Reactive Extension for .NET 첫 릴리즈

4. 2010년년 3월 RxJS 첫 릴리즈

5. 2012년 11월 Rx 오픈소스 등록

6. 이후 RxJava, RxKotlin, RxSwift등 다양한 언어를 지원하는 릴리즈 추가 공개

 

정도로만 알면 될거같다.

참고 링크 : https://huns.me/development/2051

 

MS는 ReactiveX를 왜 만들었을까? (feat. RxJS)

김코딩 님이 잘하고 싶어서 만든 블로그

huns.me

(이외에도 참고한 블로그가 있지만 가장 간략하고 큰 틀만 알 수 있게 정리해놓은거 같아 해당 블로그만 올리도록 하겠다.)

 

3. Rx의 제공 기능

Rx의 기능 제공 목록을 살펴보도록 하겠다.

공식 문서의 Docs에는 다음의 기능이 나열되어있다.

이 다양한 기능들은 결국 Observer로 통하게된다.

현재 필자는 개발 하면서 Observer를 아주 자주 사용하고있다.

그 이유로는 UI로직과 데이터 로직을 분리 하기 편하고, 하나하나 값 세팅 코드를 추가해주지 않아도 된다는 이점에서이다.

이러한 UI/데이터 로직 분리를 쉽게 해주는것이 Observer라고 생각을 하였는데, 정작 자세하게는 못 알아봤던거같다.

Rx_Anything에는 이러한 개념이 탑재되었고, 이 기능들을 필자는 단순하게 사용만 하고있었던것이다.

따라서 위의 내용들중 필자가 ReactiveX를 사용하는 가장 큰 이유 Observable에 대해서만 다루어 보려고 한다.

Observable(관찰자)

Observable

하다는 의미는 특정 객체의 상태 변화를 감지 할 수 있다는 것이다.

Rx문서를 살펴보면 다음과 같은 글이있다.

 

위의 글을 읽어보면 Java에 Futures라는 기능이 있다는것을 알 수 있고, 이를 좀 더 수월하게 사용 가능 하도록 고안되어 만들어진 기능이 Rx의 Observable기능이라는 것이다.

Java의 Futures는 비동기 계산의 아직 완료되지 않은 값을 다루기 위해 만들어진 기능이다(Java8버전 부터는 CompleatableFuture로 대체 되었다.) 해당 기능에 대하여 알아보고 싶은 사람들은 다음 링크를 이용하길 바란다.

 

Future와 Rx의 Observable은 비슷한 기능을 하는 것에 틀림없다. 하지만 그건 Fuuture와 Observable을 비교했을때고

필자는 Java8버전에 적용된 CompletableFuutre와 비교한다면? 에 대하여 궁금증이 생겼으나 그건 나중에 기회가 되면 알아보고 포스팅 하도록 하겠다.

(24.08.29추가 : 찾아보니 CompletableFuture와 ReactiveX를 비교하였을때 비동기 작업 처리를 해주는건 동일 하지만 ReactiveX의 경우 더 많은 기능을 제공하기에 ReactiveX를 주로 사용한다고 한다.)

 

각설 하고 Rx에서 주장하는 Observable의 장점은 다음과 같다.

 

1. 복잡하지 않은 비동기 계산 항목 추가

2. 유연한 Observable의 사용성

 

다양한 내용이 있는 공식 문서이지만 모두 다루기에는 포스팅이 너무 길어 질 것 같다고 생각한다.

필자가 생각 하기에는 ReactiveX를 사용하는 가장 큰 이유는 다음과 같다고 생각한다.

 

1. 비동기 계산 처리 및 관리의 용이함

2. Observer를 통한 객체 상태 관리 및 반응형 UI 적용

이러한 이점을 잘 만들어 놨다보니 Web, App따지지 않고 ReactiveX를 사용하지 않을 까? 라는 생각을 하며, 이 포스팅을 마치도록 하겠다.

반응형