본문 바로가기
Kotlin&Java/Reactive Programming

[Reactive Programming] 비동기 데이터 스트림 ReactiveX 개념 정리

by 굿햄 2023. 3. 1.

Subject

지난 글에서 언급한 반응형 프로그래밍(Reactive Programming)을 구현하기 위해선 Flow, RxJava 등의 비동기 데이터 스트림 라이브러리는 현대에서 필수불가결한 요소입니다.
그중 대표적인 ReactiveX API에 대해 알아보고자 합니다.

ReactiveX (RxJava, RxSwift,...)

Rx의 의미가 무엇일까?

ReactiveX의 줄임말로, "비동기 프로그래밍을 위한 관찰 가능한 Stream API"라는 의미를 갖고 있으며,

Observer 패턴, Iterator 패턴, Functional Programming(함수형 프로그래밍)의 구현에 최적화되어있다고 합니다.

 

Observable과 변환, 구독 과정을 나타낸 Marble Diagram (구슬 다이어그램)

공식 홈페이지에서는 ReactiveX를 활용하여 Observer 패턴을 구현하는 방법을 3 단계로 표현하고 있습니다.

  • Create: Easily create event streams or data streams. (이벤트 스트림이나 데이터 스트림을 쉽게 만드세요)
  • Combine: Compose and transform stream with query-rike operators. (쿼리와 유사한 연산자로, Stream을 수성하고 변환합니다)
  • Listen: Subscribe to any observable stream to perform side effects. (관찰 가능한 스트림 = Observable Stream을 구독하여 이벤트를 수행합니다.)

Create구독 가능한 객체 Observable를 생성하는 것을 의미하고,

Listen은 Observable을 구독하는 구독자(변화를 감지하고 실행하는 주체)를 의미합니다.

 

그리고 Observable는 Data Stream(데이터 스트림)을 발생시킵니다.

Stream은 클릭 등의 이벤트뿐만 아니라, 사용자 입력, 변수, 데이터 구조 등 무엇이든 될 수 있습니다.

이러한 Stream에는 다양한 함수형 도구들이 제공되며, 이러한 것을 활용하여 필요한 데이터만 수집하거나, 변형시킬 수 있으며 Combine은 이러한 데이터 스트림 변환을 의미합니다.

 

이 API는 각 분야별로 다방면에서 활용됩니다.

  • Frontend: 웹이나 모바일에서 API 응답이나 UI 이벤트를 조작
  • Cross-platform: Java, Scala, C#, C++, Javascript, Python 등에서 사용
  • Backend: ReactiveX의 비동기성을 활용하여, 동시성(Concurrency)과 구현 독립성(Implementation independence)을 가능하게 합니다.

 

ReactiveX의 장점

  • Functional: 관찰 가능한 스트림을 사용하여 입/출력을 관리하고, 복잡한 상태 저장을 피합니다.
  • Less is more: ReactiveX의 연산자를 통해 복잡한 연산을 짧은 코드로 줄입니다.
  • Async error handling: 전통적인 try/catch는 비동기 연산에 무력하지만, ReactiveX는 비동기 에러 핸들링에 적합한 메커니즘(구조)을 갖고 있습니다.
  • Concurrency mad easy: ReactiveX의 Observables 및 Scheduler를 통해 프로그래머는 저수준 스레딩, 동기화 및 동시성 문제를 추상화할 수 있습니다.

 


ⓒ 굿햄 2022. daryeou@gmail.com all rights reserved.

댓글