관리 메뉴

나만을 위한 블로그

[Android] Rxjava란? 본문

개인 공부

[Android] Rxjava란?

참깨빵위에참깨빵_ 2021. 1. 23. 02:09
728x90
반응형

안드로이드 디벨로퍼 홈페이지나 예제를 찾다보면 rxjava라는 키워드를 한번쯤은 보게 된다.

rxjava는 뭘까? 그리고 왜 쓰는 걸까?

 

먼저 rxjava가 뭔지부터 찾아봤다.

 

github.com/ReactiveX/RxJava

 

ReactiveX/RxJava

RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM. - ReactiveX/RxJava

github.com

rxjava는 관찰 가능한 시퀀스를 써서 비동기 및 이벤트 기반 프로그래밍을 구성하기 위한 라이브러리인 Reactive Extensions의 java VM 구현이다. 관찰자 패턴을 확장해 데이터, 이벤트의 시퀀스를 지원하고 낮은 수준의 쓰레딩, 동기화, 쓰레드 안전성 및 동시 데이터 구조 같은 문제를 추상화하면서 선언적으로 시퀀스를 함께 구성할 수 있는 연산자를 추가한다.

시퀀스(Sequence) : (일련의) 연속적인 사건들, (사건행동 등의) 순서/처리, 차례로 배열하다

 

www.quora.com/What-is-Rxjava

 

What is Rxjava?

Answer (1 of 5): RxJava is a Java VM implementation of ReactiveX (Reactive Extensions), a Reactive Programming library for Android development. It is a library for composing asynchronous and event-based programs by using observable sequences. Being one of

www.quora.com

rxjava는 안드로이드 개발을 위한 리액티브 프로그래밍 라이브러리인 Reactive X(Reactive Extensions)의 Java VM 구현이다. 관찰 가능한 시퀀스를 써서 비동기 및 이벤트 기반 프로그램을 구성하기 위한 라이브러리다...(중략)...동시성/비동기 작업을 촉진하는 것을 목표로 한다.

 

www.linkedin.com/learning/rxjava-design-patterns-for-android-developers/what-is-rxjava

 

What is RxJava? - RxJava: Design Patterns for Android Developers 동영상 튜토리얼 | LinkedIn 온라인클래스(이전 이

Jon Bott goes gives an overview of what RxJava is, including the idea of streams of data or values of time, and how you can subscribe to those values.

www.linkedin.com

Reactive Extensions의 Java 가상 머신(VM) 구현인 RxJava 라이브러리는 관찰자 패턴을 확장하여 Android 개발자가 사용자 이벤트 및 데이터 변경에 응답하는 앱을 쉽게 프로그래밍 할 수 있도록 한다

rxjava는 비동기 및 이벤트 기반 프로그램(앱)을 만들기 위한 라이브러리라고 볼 수 있겠다.

그런데 공통적으로 나오는 키워드가 몇 개 있다. 바로 비동기와 이벤트 기반, Reactive Extensions라는 키워드다.

이것들을 한번 확인해보면 rxjava가 뭔지 이해하는 데 좀 수월해지지 않을까? 먼저 비동기부터 확인해보자.

 

비동기 : 앞에서 행하여진 사상()이나 연산이 완료되었다는 신호를 받고 비로소 특정한 사상이나 연산이 시작되는 방식
동기 : 주기적인 운동을 하는 개체들이 서로 영향을 주고받거나 받게 됨으로써, 동일한 주기를 갖게되는 것, 그러한 현상을 동기 현상(同期現狀)이라 하고, 동기된 상태를 동기화(同期化) 되었다고 한다, 통신에서는 주로 서로 다른 시스템이나 네트워크에서 클럭 주파수나 비트, 프레임, 워드 등을 일치시키는데 사용된다.

 

비동기의 비(非)는 아니라는 뜻으로 동기적이지 않다는 뜻이라, 동기는 무슨 뜻인지 확인해봤다.

그런데 이렇게 보면 동기와 비동기의 차이가 뭔지 확실히 알기 어렵다. 비동기는 신호를 받으면 다른 뭔가가 시작된다는 거고 동기는 작동하는 어떤 것들이 영향을 주고받아 일정 주기를 갖는 걸 말하는 듯한데, 이게 맞는 뜻인지 의심스럽다.

그래서 영문 위키백과에서 비동기(Asynchrony)를 검색해봤다.

 

컴퓨터 프로그래밍에서 비동기는 주 프로그램 흐름과 독립적인 이벤트 발생 및 이러한 이벤트를 처리하는 방법을 나타냅니다. 이는 신호의 도착과 같은 "외부"이벤트이거나 프로그램이 결과를 기다리도록 차단하지 않고 프로그램 실행과 동시에 발생하는 프로그램에 의해 유발된 작업일 수 있습니다. 비동기 입/출력은 후자의 비동기 원인의 예이며, 프로세서가 프로그램을 계속 실행하는 동안 프로그램이 이러한 요청을 처리하는 스토리지 또는 네트워크 장치에 명령을 내릴 수 있도록 합니다. 이렇게 하면 어느 정도의 병렬 처리가 제공됩니다.

약간 자바 공부할 때 어려워서 애먹었던 쓰레드와 비슷한 것 같다. 내가 별도로 만든 쓰레드는 메인 쓰레드가 돌아가면 특정 시점에 메인 쓰레드와 다른 작업을 수행하기 때문에 이 설명을 듣고 쓰레드가 바로 떠올랐다.

아래는 영문 위키백과에서 비동기의 예시를 써놓은 것이다.

 

  • 비동기 프로시저 호출 : 동시에 프로시저를 실행하는 방법으로, 쓰레드에 대한 간단한 대안이다
  • Ajax : asynchronous JavaScript and XML의 약자, 비동기 I/O 웹 애플리케이션을 만들기 위해 클라이언트에서 사용되는 많은 웹 기술을 활용하는 웹 개발 기술 세트
  • 비동기 방식 디스패치(AMD) : 서버 측에서 많은 수의 오래 지속되는 클라이언트 요청을 처리해야 할 때 쓰이는 데이터 통신 방식

이걸 보면 쓰레드와 비동기는 딱히 연관성이 없는 듯하다.

그리고 이걸 보고 '그럼 비동기라는 키워드는 행동과 관련있지 않나?' 하는 생각이 들었다.

동기란 것은 결국 요청을 보낸 후 응답(결과)이 동시에 이뤄지는 것이고, 비동기는 요청을 보낸 후 응답이 오건말건 다음 행동이 동작하는 방식이다.

비동기에 대한 포스팅이 아니기 때문에 비동기는 여기서 마무리하고, Reactive Extensions라는 키워드를 찾아봤다.

 

Reactive : 반응(반작용)을 보이는, 반응을 하는
Extension : (세력, 영향력, 혜택 등의) 확대, 증축한 방(들)

 

사전적 정의로는 어떤 것에 반응하여 확대되는 것이란 뜻으로 예측된다.

그럼 개발 분야에서 Reactive Extensions는 무엇인지 확인해보자.

 

Reactive Extensions는 'Reactive X'와 같은 뜻이고, Reactive X는 아래 홈페이지들에서 이렇게 말하고 있다.

reactivex.io/

 

ReactiveX

CROSS-PLATFORM Available for idiomatic Java, Scala, C#, C++, Clojure, JavaScript, Python, Groovy, JRuby, and others

reactivex.io

ReactiveX는 Observer Pattern, Iterator Pattern, 함수형 프로그래밍의 조합이다

 

en.wikipedia.org/wiki/ReactiveX

 

ReactiveX - Wikipedia

ReactiveXOther namesReactive ExtensionsOriginal author(s)MicrosoftDeveloper(s)ReactiveX contributorsInitial releaseJune 21, 2011; 9 years ago (2011-06-21)Repositorygithub.com/ReactiveXWritten inJava, Scala, C#, C++, Clojure, JavaScript, Python, Groovy,

en.wikipedia.org

Reactive X(Reactive Extensions)는 데이터가 동기건 비동기건 명령형 프로그래밍 언어가 데이터 시퀀스에서 작동할 수 있도록 하는 도구 세트다. 시퀀스의 각 항목에 대해 작동하는 시퀀스 연산자 집합을 제공한다. 이는 반응형 프로그래밍이며, 여러 프로그래밍 언어로 구현되는 도구에 대한 청사진을 제공한다.
Reactive X는 관찰 가능한 스트림을 사용하는 비동기 프로그래밍을 위한 API다. 비동기 프로그래밍을 사용하면 프로그래머가 함수를 호출한 다음, 완료되면 함수가 "콜백"되도록 할 수 있다. 일반적으로 함수가 완료되면 실행할 다른 함수의 주소를 함수에 제공한다. 이런 방식으로 설계된 프로그램은 많은 쓰레드가 지속적으로 시작 및 중지되는 오버헤드를 방지한다.
ReactiveX는 관찰자와 반복자 패턴과 함수형 프로그래밍에서 나온 아이디어의 조합이다.

 

동기/비동기에 상관없이 프로그래밍 언어가 데이터 시퀀스에서 작동할 수 있도록 하는 도구 세트를 말한다고 한다.

데이터 시퀀스는 무엇인가? Data Sequencing이라는 키워드가 대신 나오는데 이것은 컴퓨터 화면에 표시하기 위해 데이터를 정렬하는 것을 말한다. 그럼 rxjava에서의 데이터 시퀀스는 무엇일까?

 

reactivex.io/intro.html

 

ReactiveX - Intro

ReactiveX ReactiveX is a library for composing asynchronous and event-based programs by using observable sequences. It extends the observer pattern to support sequences of data and/or events and adds operators that allow you to compose sequences together d

reactivex.io

Reactive X는 관찰 가능한 시퀀스를 사용해 비동기 및 이벤트 기반 프로그램을 구성하기 위한 라이브러리다. 관찰자 패턴을 확장하여 데이터 및(또는) 이벤트의 시퀀스를 지원하고 저수준 쓰레딩, 동기화, 쓰레드 세이프, 동시 데이터 구조 및 비차단 I/O와 같은 우려 사항을 추상화하면서 선언적으로 시퀀스를 구성할 수 있는 연산자를 추가한다...(중략)...Observable은 여러 항목의 비동기 시퀀스에 액세스할 수 있는 이상적인 방법이 되어 공백을 메운다.

이 사이트에서 시퀀스 키워드가 사용된 부분을 정리해서 문장으로 만들어보면

  • 시퀀스(Sequence)는 관찰 가능하다
  • 시퀀스의 종류는 데이터와 이벤트다
  • 시퀀스는 저수준 쓰레딩 등의 우려되는 여러 사항을 추상화하고, 선언적으로 구성될 수 있다

???????????????? 관찰 가능하단 건 또 무엇인가? 보면 볼수록 알고싶은 건 해소되지 않는데 모르는 것만 줄창 쌓여간다.

좀 더 찾아보니 Observable은 자바에서 아래처럼 쓸 수 있다고 한다.

 

Observable<Int>
Observable<String>

즉 Observable은 자료형이다. 정확히 말하면 요소에 접근 가능하도록 만들어진 자료형인 것이다.

 

이 이상 쓰다보면 걷잡을 수 없이 길어질 것 같으니 여기서 Rxjava를 한 줄로 정리하면

 

  • Rxjava는 관찰 가능한 시퀀스를 사용해 비동기 및 이벤트 기반 프로그래밍을 구현하기 위한 라이브러리다.
반응형
Comments