Rx -1-

cloud0·2021년 9월 10일
0
post-thumbnail

Reactivie Programming


Reactive Programming 이란 데이터 흐름과 전달에 관한 프로그래밍 패러다임이다.

우리는 주로 알고리즘 문제와 같이 절차를 명시하여 순서대로 실행되는 Imperative Programming(명령형 프로그래밍)을 한다. 반면 Reactive Programmgin이란 데이터의 흐름을 먼저 정의하고 데이터가 변경되었을 때 연관된 작업이 실행된다. 즉 프로그래머가 어떠한 기능을 직접 정해서 실행하는 것이 아닌, 시스템에 발생했을 떄 알아서 처리되는 것이다.

기존의 프로그래밍 방식을 Pull 방식, Reactive 프로그래밍 방식을 Push 방식이라고도 한다. Pull 방식은 데이터를 사용하는 곳 (Consumer)에서 데이터를 직접 가져와서 사용한다면, Push 방식은 뎅이터의 변화가 발생한 곳에서 새로운 데이터를 Consumer에게 전달한다.

따라서 Reactive 프로그래밍은 주변 환경과 끊임없이 상호작용을 한다. 다만 프로그램이 주도하는 것이 아니라 환경이 변하면 이벤트를 받아 동작함으로써 상호작용을한다.

RxJava


RxJava는 ReactiveX의 Java 언어 라이브러리

  • ReactiveX는 관찰가능한 절차를 통해 비동기, 이벤트 기반 프로그램을 구성하기 위한 라이브러리이다.
  • Observer Pattern을 확장하며, Sequence를 조합할 수 있는 연산자를 지원한다.
  • low-level Thread,동기화,Thread 안전성,non-blocking I/O 에 관한 우려를 줄인다.

RxJava는 러닝 커브가 가파르다. 전통적인 스레드 기반의 프로그래밍을 사용하는 자바와 접근 방식이 다르기 때문이다. 여러 스레드를 사용하는 경우 예상치 못한 문제가 발생할 수도 있고 디버깅 하기도 어렵다.

따라서 RxJava는 함수형 프로그래밍 방식을 도입하였다. 함수형 프로그래밍은 Side Effect가 없는 순수 함수를 지향하기 때문에 Thread-Safe하다.

ReactiveX의 이러한 방식을 구성하게 해주는 핵심 요소가 바로 Observable과 Operator

Marble Diagram


Marble Diagram은 ReactiveX을 이해하는 핵심 도구입니다.

아래는 Marble Diagram이 어떻게 Observable과 Observable의 전환을 표현하는지 보여준다.(이후 포스트에 다루는 Observable Marble Diagram)

  • 가로실선 : Timeline
  • 모형(★, ●, ■, ◆, …) : Observable에서 발생하는 데이터 (onNext 발생)
  • 세로 실선(파이프) : 데이터 발행의 완료를 의미함, 발행 완료이후에는 더 이상 데이터 발행이 불가능하다(onComplete 발생)
  • 가운데 박스 : Operator, 이 박스를 거치면 데이터가 변한다
  • 아래에 내려오는 점선 화살표 : 각각 함수의 입력과 출력을 나타낸다
  • X : 오류가 발생했음을 의미한다. (onError 발생)
예제를 해석하면, ★, ▼, .., ◆ 데이터가 차례로 들어와 ◆ 이후 데이터 발행이 완료되었다.
각 데이터는 flip 연산자를 거쳐 새롭게 변환되었으며(▼ -> ▲),
초록색 오각형 이후 어떠한 오류로 인해 데이터 발행이 비정상적으로 종료되었다. 

예제를 해석하면 ● 데이터 카운터 2개를 모아서 List 객체에 전달하고 3번째는 스킵합니다.

REFERENCE

profile
이...사...중......

0개의 댓글