RxJS
개요
JavaScript 용 반응형 확장 라이브러리
RxJS는 Observables를 사용하여 비동기식 또는 콜백 기반 코드를보다 쉽게 작성하도록하는 리 액티브 프로그래밍 용 라이브러리입니다.
RxJS는 관찰 가능한 시퀀스를 사용하여 비동기 및 이벤트 기반 프로그램을 작성하기위한 라이브러리입니다.
Observable, 위성 유형 (Observer, Schedulers, Subjects) 및 Array#extras (Map, Filter, Reduce, Every 등)에 영향을받는 연산자를 사용하여 비동기 이벤트를 콜렉션으로 처리 할 수 있습니다.
ReactiveX는 Observer 패턴과 Iterator 패턴을 결합하고 컬렉션을 사용한 함수형 프로그래밍을 통해 이벤트 시퀀스를 관리하는 이상적인 방법의 필요성을 충족시킵니다.
핵심 개념
비동기 이벤트 관리를 해결하는 RxJS의 핵심 개념은 다음과 같습니다.
Observable
ReactiveX에서 옵저버는 Observable을 구독한다.
Obseravable이 배출하는 하나 또는 연속된 항목에 옵저버는 반응한다.
이러한 패턴은 동시성 연산을 가능하게 한다.
그 이유는 Observable이 객체를 배출할 때까지 기다릴 필요 없이 어떤 객체가 배출되면 그 시점을 감시하는 관찰자를 옵저버 안에 두고 그 관찰자를 통해 배출 알림을 받으면 되기 때문이다.
Operators
ReactiveX를 지원하는 언어 별 구현체들은 다양한 연산자들을 제공하는데, 이 중에는 공통적으로 제공되는 연산자도 있지만 반대로 특정 구현체에서만 제공하는 연산자들도 존재한다.
또한, 언어별 구현체들은 이미 언어에서 제공하는 메서드의 이름과 유사한 형태로 연산자의 네이밍 컨벤션을 유지하고 있다.
Single
RxJava(그리고 RxGroovy나 RxScala 같은 reactivex의 구현체들)는 Observable과 유사한 “Single”을 제공한다.
Single은 Obvservable의 한 형태이지만, Observable처럼 존재하지 않는 곳에서부터 무한대까지의 임이의 연속된 값들을 배출하는 것과는 달리, 항상 한 가지 값 또는 오류 알림 둘 중 하나만 배출한다.
Subject
주제(subject)는 옵저버나 Observable처럼 행동하는 ReactiveX의 일부 구현체에서 사용 가능한 일종의 교각 혹은 프록시라고 볼 수 있는데, 그 이유는 주제는 옵저버이기 때문에 하나 이상의 Observable을 구독할 수 있으며 동시에 Observable이기도 하기 때문에 항목들을 하나 하나 거치면서 재배출하고 관찰하며 새로운 항목들을 배출할 수도 있다.
하나의 주제는 하나의 Observable을 구독하면서, (Observable이 "차가운" Observable인 경우 즉, 옵저버가 구독을 시작하기 전까지 항목들의 배출을 지연시키는 Observable일 경우)Observable이 항목들을 배출시키도록 동작시킨다.
그 결과로 인해 원래는 "차가운" Observable이었던 주제를 "뜨거운" Observable로 만들기도 한다.
Schedulers
Observable 연산자 체인에 멀티스레딩을 적용하고 싶다면, 특정 스케줄러를 사용해서 연산자(또는 특정 Observable)를 실행하면 된다.
ReactiveX의 일부 Observable 연산자는 사용할 스케줄러를 파라미터로 전달 받기도 하는데, 이 연산자들은 자신이 처리할 연산의 일부 또는 전체를 전달된 스케줄러 내에서 실행한다.
댓글