리액티브란 입력이 발생했을 때 최대한 빠른 시간에 응답하도록 하는 설계 원칙이라고 할 수 있다.
즉 리액티브 시스템이란 바로 빠른 반응속도를 갖는 시스템을 말한다고 보면 된다.
여기서 빠른 반응속도란 앱 내의 개별 컴포넌트의 반응속도뿐 아니라 그 사이의 상호작용 및 확장, 축소, 균형 조정 등의 속도를 포함한다.
이런 핵심 가치를 잘 나타내고 있는 것이 2014년 발표된 리액티브 선언문(Reactive Manifesto)
리액티브 시스템 이라는 설계 원칙을 구현하는 리액티브 프로그래밍에 대해 알아보자.
앞서 언급했듯이 리액티브 프로그래밍이란 논 블로킹, 비동기 데이터 흐름 및 새로운 정보의 가용성에 기반을 둔 선언형 개발 패러다임이다.
각각의 개념은 리액티브 시스템이라는 원칙을 떠받치고 있는데, 간략하게 알아보자.
사용자의 관점에서 보면 하나의 작업이 진행되는 동안 앱이 멈춘 것처럼 느껴지는 것이 블로킹의 단점이라 할 수 있다.
반면 논 블로킹의 경우 멈추지 않고 계속해서 다른 작업을 진행할 수 있으며,
문제를 여러 개의 단계로 나누어 실행함으로써 멀티코어 CPU의 능력을 극대화할 수 있다.
호출된 함수의 결과는 당연히 호출된 쪽에서 신경 써야 할 것 같지만, 좀 더 알아보면 아래와 같다.
동기와 블로킹이 비슷해 보일 수 있는데, 호출된 함수의 반환을 기다린다는 점에선 같지만
- Synchronous 반환을 기다리며 대기열에 머무는 것이 필수가 아님
- Blocking - 반환을 기다리며 대기열에 머무는 것이 필수
라는 차이점이 존재
추가로 리액티브 프로그래밍은 비동기 논 블로킹 방식으로 진행되기 때문에 위 그림에서 두 가지를 합친 식으로 흘러가게 된다.
프로그래밍 패러다임이란 쉽게 말하면 프로그램을 무엇으로 볼 것인가, 즉 관점에 대한 답이다.
객체지향 프로그래밍의 패러다임 : '프로그램은 상호작용하는 객체의 집합이다.'라는 관점
함수형 프로그래밍의 패러다임 : '프로그램은 연속된 함수의 집합이다.'라는 관점
계속해서 여기서 '선언형 프로그래밍'이란 '명령형 프로그래밍'과 대비되는 개념이며
목표를 선언하고 알고리즘을 감추는, 함수형 프로그래밍과 논리형 프로그래밍 등을 가리키는 용어이다.
자바에서 함수형 프로그래밍 기법은 람다식과 스트림으로 지원한다.