Reactive Progragmming과 ReactiveX(Reactive Extentions)의 정의
Reactive Programming
데이터의 흐름과 전달에 관한 프로그래밍 패러다임이다.
ReactiveX(Reactive Extentions)
이벤트 기반 비동기 프로그래밍을 위한 라이브러리
콜백 방식과 달리, 발생하는 이벤트를 이벤트 스트림에 전달, 이벤트 스트림을 관찰하다가 원하는 이벤트 감지 시 이에 따른 동작을 수행하는 방식
RxJava
RxJava란 자바로 리액티브 프로그래밍을 할 수 있는 라이브러리이며 비동기 프로그래밍과 함수형 프로그래밍 기법을 함께 활용
데이터 흐름을 먼저 정의하고 데이터가 변경되었을때 연관되는 함수나 수식이 업데이트되는 방식
즉, 상태 변화를 관찰하고 있다가 능동적으로 동작하는 프로그램을 작성할 수 있게 한다.
서버통신 등 데이터가 중심이 되는 구조를 짜고자 할 때 유용하게 쓸 수 있다.
예제를 통해 Reactive Programming(반응형 프로그래밍) 이해하기
짝수만 출력하도록 하는 코드로 명령형 프로그래밍 방식과 반응형 프로그래밍 방식이 어떻게 다른지 확인해보았다.
Imperative programming(명령형 프로그래밍)
명령형 프로그래밍은 작성된 코드가 정해진 순서대로 실행되는 방식의 프로그래밍이다.
코드가 순서대로 진행되므로 이해하기 쉽다.
public void imperativeProgramming() {
ArrayList<Integer> items = new ArrayList<>();
items.add(1);
items.add(2);
items.add(3);
items.add(4);
for (Integer item : items) {
if (item % 2 == 0) {
System.out.println(item);
}
}
items.add(5);
items.add(6);
items.add(7);
items.add(8);
}
결과 화면
2
4
동작 순서
1. 리스트 생성
2. 리스트에 1~4 아이템 추가
3. for문으로 items 리스트를 순회하며 짝수를 출력
4. 리스트에 5~8 아이템을 추가
5. println() 이후에 리스트에 아이템을 추가해도 결과에는 영향을 미치지 않는다.
Reactive Programming(반응형 프로그래밍)
반응형 프로그래밍은 시간 순으로 들어오는 모든 데이터의 흐름을 스트림(Stream)으로 처리하며,
하나의 데이터 흐름은 다른 데이터 흐름으로 변형되기도 하고,
여러 데이터 흐름이 하나의 데이터 흐름으로 변경될 수도 있다.
public void reactiveProgramming() {
PublishSubject<Integer> items = PublishSubject.create();
items.onNext(1);
items.onNext(2);
items.onNext(3);
items.onNext(4);
items.filter(item -> item % 2 == 0)
.subscribe(System.out::println);
items.onNext(5);
items.onNext(6);
items.onNext(7);
items.onNext(8);
}
결과 화면
6
8
동작 순서
1. 데이터 스트림 생성 (PublishSubject)
2. 데이터 스트림에 1~4 아이템을 추가
3. 데이터 스트림에서 짝수만 출력하는 데이터 스트림으로 변형한 뒤 구독
4. 데이터 스트림에 5~8 아이템을 추가
5. PublishSubject는 구독 시점 이후의 데이터만 옵저버에 전달하기 때문에 6, 8만 출력.
(구독시점 이전의 데이터까지 출력하려면 ReplaySubject로 대체할 수 있다.)
Rxjava의 필요성
Rxjava는 동시성 문제, 다중 이벤트 처리, 백그라운드 스레드 처리 등에 대해 해결책을 제시
또한, 데이터들을 빠르게 처리하고 이와 동시에 데이터들을 병합, 필터링, 분할 및 변환 확장할 방법을 제시
Rxjava는 기존에 작성한 비지니스 로직에 변경사항이 생겨도 큰 리팩토링 없이 쉽게 수정이 가능, 그러므로 Rxjava를 사용하면 프로덕션의 안정성을 유지하면서 애플리케이션을 전략적으로 진화시킬 수 있다.
마블 다이어그램
마블 다이어그램은 RxJava를 이해하는 핵심 도구이다.
RxJava를 만든이유
- Java는 동시성 처리를 하는 데 번거로움이 있다. RxJava는 클라이언트의 요청을 처리할 때 다수의 비동기 실행 흐름(스레드 등)을 생성하고 그것의 결과를 취합하여 최종 리턴하는 방식으로 내부 로직을 변경했다.
- RxJava에서는 비동기 흐름을 조합할 수 있는 방법을 제공한다.
- 비동기 방식으로 동작하는 가장 대표적인 프로그래밍 패턴은 콜백이다. 그래서 RxJava는 콜백을 사용하지 않는 방향으로 설계하여 이를 해결한다.
RxJava
https://blog.yena.io/studynote/2020/10/11/Android-RxJava(1).html
https://imwj.notion.site/1-c756ff9a819346a38e1ebc2c8d665424
https://taeiim.tistory.com/entry/RxJava2-1-리액티브-프로그래밍과-RxJava
https://velog.io/@minnie_dev/RxJava-RxJava
'Java > Etc' 카테고리의 다른 글
RxJava Cold Observable vs Hot Observable (0) | 2022.03.20 |
---|---|
자바(JDK, JRE) 설치 및 환경변수 설정 (0) | 2022.01.24 |
자바(JDK, JRE) 모든 버전 다운로드(6,7,8,9,10,11,12,13,14,15,16,17) 및 설치 (0) | 2022.01.11 |