Reactive Programming
비동기적 데이터 흐름을 처리하는 프로그래밍
Asynchronous Dataflow Programming 이라고도 불리운다.
핵심은 비동기적인 데이터의 Stream으로 간주하고, Observer 디자인 패턴을 활용해서 비동기 이벤트를 처리한다.
Reactive Programming은 실시간으로 반응을 하는 프로그래밍
Imperative Programming(명령형 프로그래밍)과 대비되는 개념이다.
예를 들어서 a = b + c 라고 했을 때,
명령형 프로그래밍에서는 a 는 b + c 연산의 결과물이 되며 b와 c의 값이 바뀌어도 재연산 명령이 들어오지 않는 한 a값은 그대로이지만
Reactive Programming에서는 b와 c의 값이 변할 때마다 a값이 바뀐다.
요즘처럼 실시간으로 앱과 서버가 정보를 주고 받게되는 프로그램에서는 Reactive Programming을 많이 선호한다.
Reactive Programming의 핵심은 Async 비동기 이벤트와 Observer 디자인 패턴이다.
비동기(Asynchronous) 이벤트는 프로그램에서 다양한 작업들이 동시에 수행되는 중에 어떤 작업이 완료되는 것과 같은 이벤트를 말한다.
앱과 서버는 서로에게 끊임없이 정보를 요구하고 주고 받게 되며, 이 과정에서 유저의 인터페이스를 방해하지 않고 뒷단에서 데이터를 가져오는 작업이 바로 비동기 작업
Reactive Programming을 위해 유저가 입력할 때마다 즉각적으로 반응하려면
프로그램이 지속적으로 값을 관찰(Observer)해야하고, 값에 변화가 일어날 때마다 특정 연산이 수행되어야 한다.
이러한 패턴을 Observer 또는 Observation 디자인 패턴이라고 하며 비동기 이벤트를 처리하는 Reactive Programming의 근간이 된다.
Observer는 계속 듣고 있다는 것과 같은 말이다
Reactive Programming에서는 해당 스트림에 subscribe한 것이라고 표현하기도 한다.
Rx는 ReactiveX의 약자로 비동기적 이벤트를 손쉽게 처리하기 위해 만들어진 API
Rx의 목적은 비동기 이벤트 계의 map, filter, reduce가 되자이다.
Rx에서는 모든 것이 Data Stream이다.
모든 것이 Stream이라는 개념을 잘 이해해야 Rx를 활용할 수 있다.
Rx는 Stream을 Observable이라고 표현하며 실제 라이브러리에서도 Observable의 객체로 선언된다.
참조
Reactive Programming 개념 설명
https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
Functional Programming
http://blog.jenkster.com/2015/12/what-is-functional-programming.html
ReactiveX
Reactive Programming과 Rx