리액티브X

ReactiveX
리액티브X
Microsoft Live Labs Volta logo.png
기타 이름반응형 확장
원본 작성자마이크로소프트
개발자리액티브X 기여자
초기 릴리즈2011년 6월 21일; 10년(2011-06-21)
리포지토리github.com/ReactiveX
기록 위치자바, 스칼라, C#, C++, Clojure, 자바스크립트, 파이톤, 그로비, JRuby
플랫폼크로스 플랫폼
유형API
면허증아파치 면허 2.0,
MIT 라이선스
웹사이트reactivex.io

소프트웨어 프로그래밍에서 ReactiveX(Reactive Extensions라고도 함)는 데이터가 동기식인지 비동기식인지에 관계없이 데이터 시퀀스에서 필수 프로그래밍 언어가 작동할 수 있도록 하는 도구 모음입니다.각 항목에서 순차적으로 동작하는 시퀀스 연산자 세트를 제공한다.그것은 반응형 프로그래밍의 구현이며 여러 프로그래밍 언어로 구현될 도구에 대한 청사진을 제공한다.

개요

ReactiveX는 관측 가능한 스트림을 가진 비동기 프로그래밍을 위한 API이다.[1]

비동기 프로그래밍은 프로그래머가 기능을 호출한 다음, 그들이 실행되면 "콜백" 기능을 가질 수 있게 하는데, 보통은 그것이 실행되었을 때 실행할 다른 기능의 주소를 함수에 부여한다.이러한 방식으로 설계된 프로그램은 많은 스레드가 지속적으로 시작 및 중지될 때 발생하는 오버헤드를 피하는 경우가 많다.

Reactive Extensions의 맥락에서 관측 가능한 스트림(즉, 관측할 수 있는 스트림)은 다음, 오류 및 완료의 세 가지 이벤트를 방출하는 이벤트 방출기와 같다.관측 가능한 이벤트는 오류 이벤트 또는 전체 이벤트를 방출할 때까지 다음 이벤트를 방출한다.그러나 그 시점에서는 다시 가입하지 않는 한 더 이상의 이벤트를 내보내지 않을 것이다.

동기

데이터 시퀀스의 경우, 이벤트 기반 비동기 프로그래밍의 유연성과 반복기의 장점을 결합한다.그것은 또한 여러 겹의 콜백에서 비롯되는 파멸의 피라미드를 제거하면서 단순한 약속으로도 작용한다.

관찰대상 및 관찰자

ReactiveX는 관찰자반복기 패턴과 기능 프로그래밍의 아이디어의 조합이다.[2]

관찰자는 관찰 가능한 순서를 구독한다.그런 다음 순서는 통상 제공된 콜백 함수를 호출하여 한 번에 하나씩 관찰자에게 항목을 전송한다.관찰자는 다음 것을 처리하기 전에 각각의 것을 처리한다.많은 이벤트가 비동기적으로 들어오면 큐에 저장하거나 삭제해야 한다.ReactiveX에서 관찰자는 이전 항목에 대해 콜백이 반환되기 전에 (다중 스레드 컨텍스트에서) 호출되지 않는 항목으로 호출되지 않는다.비동기 통화는 비동기 통화로 유지되며 관측 가능한 통화를 반환하여 처리할 수 있다.

치명적인 오류가 발생하면 관찰자에게 별도로 통지(제2의 함수를 호출하여)한다는 점에서 반복자 패턴과 유사하다.모든 항목이 전송되면 완료된다(그리고 관찰자에게 제3의 함수를 호출하여 통지한다).또한 Reactive Extensions API는 많은 운영자를 다른 프로그래밍 언어로 반복기 운영자로부터 차용한다.

리액티브 익스텐션은 리액티브 익스텐션 소개에 따라 기능 리액티브 프로그래밍과 다르다.

그것은 때때로 "기능적인 반응형 프로그래밍"이라고 불리지만 이것은 잘못된 표현이다.반응형X는 기능적일 수도 있고 반응형일 수도 있지만, "기능형 반응형 프로그래밍"은 다른 동물이다.한 가지 주요 차이점은 기능적 반응형 프로그래밍은 시간에 따라 지속적으로 변화하는 값에서 작동하는 반면, 반응형X는 시간에 따라 방출되는 이산형 값에서 작동한다는 것이다.(기능 반응 프로그래밍에 대한 자세한 내용은 Conal Eliott의 작업을 참조하십시오.)[2]

반응성 연산자

연산자는 하나의 관측 가능한(출처)을 첫 번째 인수로 삼고 또 다른 관측 가능한(목적지 또는 외부 관측 가능한)을 반환하는 함수다.그런 다음 관측 가능한 선원이 방출하는 모든 항목에 함수를 적용한 다음 관측 가능한 목적지에서 방출한다.관측 가능한 목적지에서 관측 가능한 또 다른 관측 가능한 것을 방출할 수도 있다.이것을 관찰할 수 있는 내면이라고 한다.

내부 관측용품을 방출하는 운영자는 어떤 식으로든 모든 내부 관측용품이 방출하는 항목을 결합하여 관측 가능한 외부 관측용 항목으로 방출하는 다른 운영자가 따를 수 있다.예를 들면 다음과 같다.

  • switchAll– 배출되는 즉시 관찰할 수 있는 새로운 내부를 구독하고 이전 내부를 구독 취소하십시오.
  • mergeAll– 내부 관찰이 배출되는 대로 모든 내부 관찰을 구독하고, 수신되는 순서에 따라 값을 출력한다.
  • concatAll– 관찰 가능한 각 내부를 순서대로 구독하고 다음 관찰 가능한 내부를 구독하기 전에 완료되기를 기다리십시오.

연산자를 사슬로 묶어 특정 기준에 따라 이벤트를 필터링하는 복잡한 데이터 흐름을 만들 수 있다.복수의 연산자를 동일한 관측 가능에 적용할 수 있다.

Reactive Extensions에서 사용할 수 있는 일부 연산자는 지도, 감소, 그룹 및 zip과 같은 기능 프로그래밍 언어를 사용하는 프로그래머에게 친숙할 수 있다.[3]프로그래밍 언어에 대해 특정 구현에서 사용할 수 있는 운영자는 다를 수 있지만, 반응형 확장에는 다른 많은 운영자가 있다.

반응형 연산자 예제

지도를 사용하고 연산자를 줄인 예는 다음과 같다.우리는 숫자 리스트에서 관측할 수 있는 것을 만든다.그러면 지도 운영자는 각 숫자에 2를 곱하고 관측 가능한 숫자를 반환한다.그런 다음 축소 연산자는 자신에게 제공된 모든 숫자를 합산한다(0의 값은 시작점이다).호출 구독자는 운영자 체인에 의해 관측 가능한 값을 관측할 관찰자를 등록한다.구독방식으로 관찰 가능에서 오류가 발생할 때마다 호출되는 오류 처리 기능과 관찰 가능 항목이 다 배출되었을 때 완료 기능을 전달할 수 있다.

sourceOvservable = Rx.관측가능.로부터([1, 2, 3, 4, 5]); sourceOvservable   .지도를 그리다(기능을 하다(번호를 붙이다) { 돌아오다 번호를 붙이다 * 2; })   .줄이다(기능을 하다(합계를 내다, 번호를 붙이다) { 돌아오다 합계를 내다 + 번호를 붙이다; }, 0)    .구독을 신청하다(기능을 하다(번호를 붙이다){     위로하다.통나무를 하다(번호를 붙이다);   }, 기능을 하다(착오) {     위로하다.착오(착오);   }, 기능을 하다() {     위로하다.통나무를 하다('완료');   }) 

위의 예는 JavaScript 프로그래밍 언어에 대한 Rx.js 구현을 사용한다.

역사

Reactive Extensions(Rx)는 Volta라는 더 큰 노력의 부산물로 2011년경 Microsoft클라우드 프로그래밍 가능성 팀에 의해 발명되었다.원래는 볼타에서 계층 분할을 지원하기 위해 애플리케이션의 서로 다른 계층에 걸친 이벤트에 추상화를 제공하기 위한 것이었다.이 프로젝트의 로고는 볼타를 가리키는 전기 뱀장어를 나타낸다.이름의 확장 접미사는 비슷한 시기에 발명된 병렬 확장 기술에 대한 언급이다. 두 가지는 보완적인 것으로 간주된다.

Rx의 초기 구현은 을 위한 것이었다.NET Framework는 2011년 6월 21일에 출시되었다.이후 연구팀은 자바스크립트C++ 등 다른 플랫폼에 대한 Rx 구현을 시작했다.이 기술은 2012년 말 코드플렉스(CodePlex)에서 오픈 소스로 출시되었다.이후 코드는 깃허브로 이동했다.

참고 항목

참조

  1. ^ "ReactiveX". reactivex.io. Retrieved 2020-02-20.
  2. ^ a b "ReactiveX - Introduction". ReactiveX.io. Retrieved 23 September 2018.
  3. ^ "ReactiveX - Operators". ReactiveX.io. Retrieved 23 September 2018.

외부 링크