In computing, reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change.
변화의 전파와 데이터 흐름과 관련된 선언적 프로그래밍 패러다임이다.
리액티브 프로그래밍에서는 이벤트를 비동기적으로 처리하기 때문에, 이벤트가 발생하는 즉시 처리할 수 있습니다. 이는 일반적으로 스레드와 락에 의존하는 전통적인 동기적인 프로그래밍 방식보다 훨씬 효율적이며, 대규모 시스템에서 높은 성능을 보장합니다.
리액티브 프로그래밍에서는 데이터 스트림을 다룰 수 있습니다. 이러한 데이터 스트림은 무한하거나 큰 양일 수 있으며, 이벤트가 발생할 때마다 해당 이벤트를 처리하는 콜백 함수를 등록합니다. 이러한 방식은 대규모 데이터 처리에 적합합니다.
리액티브 프로그래밍은 반응형 시스템을 구현하는 데 적합합니다. 이는 시스템이 외부 요청에 신속하게 반응하고, 빠른 응답 시간을 제공할 수 있도록 하는 기능입니다.
Push 방식 : 데이터의 변화가 발생했을 때 변경이 발행한 곳에서 데이터를 보내주는 방식
Pull 방식 : 변경된 데이터가 있는지 요청을 보내 질의하고 변경된 데이터를 가져오는 방식

코드
Observable.just(100, 200, 300, 400, 500) // Observable
.doOnNext(data -> log.info("doOnNext() => {}", data))
.subscribeOn(Schedulers.io()) // 데이터의 발행, 데이터의 흐름을 결정짓는 Tread 지정, Scheduler
.observeOn(Schedulers.computation()) // 데이터를 구독하고 처리하는 Tread 지정, Scheduler
.filter(num -> num > 300) // Operator
.subscribe(num -> log.info("{} : {}", getThreadName(), num)); // Subscriber
로그 결과
RxCachedThreadScheduler-1 : 100
RxCachedThreadScheduler-1 : 200
RxCachedThreadScheduler-1 : 300
RxCachedThreadScheduler-1 : 400
RxCachedThreadScheduler-1 : 500
RxComputationThreadPool-1 : 400
RxComputationThreadPool-1 : 400
데이터를 1건만 통지하거나 에러를 통지
데이터를 1건만 통지하거나 1건도 통지하지 않고 완료 또는 에러를 통지
데이터 생산자이지만 데이터를 1건도 통지하지 않고 완료 또는 에러를 통지하는 생산자
Reference :
- Kevin의 알기 쉬운 RxJava