최근 프로그래밍 환경
리액티브 프로그래밍에서는 다양한 시스템과 소스에서 들어오는 데이터 항목 스트림을 비동기적으로 처리하고 합쳐서 이런 요구사항 만족시킴
리액티브 애플리케이션과 시스템 개발의 핵심 원칙
비동기로 처리하는 것(ex. 퓨처와 콜백)
스레드보다 가볍다
추상수준을 높일 수 있어 데드락, 경쟁 조건과 같은 문제를 직접 처리하지 않고 비즈니스 요구사항 구현에 집중할 수 있다.
여러 애플리케이션이 한 개의 일관적인, 회복할 수 있는 플랫폼을 구성할 수 있게 해줄 뿐 아니라 이들 애플리케이션 중 하나가 실패해도 전체 시스템은 계속 운영될 수 있도록 도와주는 소픝트웨어 아키텍처
시스템을 조립하고 상호소통을 조절
리액티브 스트림: 무한의 비동기 데이터를 순서대로 그리고 블록하지 않는 억압력을 전제해 처리하는 표준 기술
발행-구독 프로토콜로 억압력을 제공한다
정적 컴포넌트 하나를 포함하고 있으며 인스턴스화할 수 없다
발행-구독 모델을 지원할 수 있도록 중첩된 4개의 인터페이스 포함
Observable<String> strings = Observable.just("first", "second");
// just() 팩토리 메서드는 한 개 이상의 요소를 이용해 이를 방출하는 Observable로 변환
Observable<Long> onePerSec = Observable.interval(1, TimeUnit.SECONDS);
//0에서 시작해 1초 간격으로 long 형식의 값을 무한으로 증가시키며 값을 방출
// 사용자와 실시간으로 상호작용하면서 지정된 속도로 이벤트를 방출해야 할때 위 메서드 사용하는 것이 적절
요소를 변환(map 사용)
요소를 합침(merge 사용)