[RxJava] RxJava란?

minnie_dev·2022년 2월 14일
0

RxJava

목록 보기
1/8
post-thumbnail

🎈 RxJava에 대해서 알아보기에 앞서서 먼저 Reactive Progragmming과 ReactiveX(Reactive Extentions)의 정의에 대해서 알아보았다.

Reactive Programming이란 데이터의 흐름과 전달에 관한 프로그래밍 패러다임이다.
ReactiveX(Reactive Extentions)이란 이벤트 기반 비동기 프로그래밍을 위한 라이브러리이며 콜백 방식과 달리, 발생하는 이벤트를 이벤트 스트림에 전달하고, 이벤트 스트림을 관찰하다가 원하는 이벤트를 감지하면 이에 따른 동작을 수행하는 방식이다.

RxJava에 대해서

RxJava란?

RxJava란 넷플릭스에서 만든 Reactive Programming 라이브러리이며 ReactiveX라이브러리의 JVM 구현체이다.
즉, 상태 변화를 관찰하고 있다가 능동적으로 동작하는 프로그램을 작성할 수 있게해준다.
서버통신 등 데이터가 중심이 되는 구조를 짜고자 할 때 유용하게 쓸 수 있다.


📋 예제를 통해 Reactive Programming(반응형 프로그래밍)이해하기

짝수만 출력하도록 하는 코드로 명령형 프로그래밍 방식과 반응형 프로그래밍 방식이 어떻게 다른지 확인해보았다.

🔴 Imperative programming(명령형 프로그래밍) VS 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를 만든이유

  1. Java는 동시성 처리를 하는 데 번거로움이 있다. RxJava는 클라이언트의 요청을 처리할 때 다수의 비동기 실행 흐름(스레드 등)을 생성하고 그것의 결과를 취합하여 최종 리턴하는 방식으로 내부 로직을 변경했다.
  2. RxJava에서는 비동기 흐름을 조합할 수 있는 방법을 제공한다.
  3. 비동기 방식으로 동작하는 가장 대표적인 프로그래밍 패턴은 콜백이다. 그래서 RxJava는 콜백을 사용하지 않는 방향으로 설계하여 이를 해결한다.

참고 : https://blog.yena.io/studynote/2020/10/11/Android-RxJava(1).html
https://velog.io/@hhi-5258/Rxjava%EB%9E%80
https://www.notion.so/1-c756ff9a819346a38e1ebc2c8d665424
https://taeiim.tistory.com/entry/RxJava2-1-%EB%A6%AC%EC%95%A1%ED%8B%B0%EB%B8%8C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EA%B3%BC-RxJava

profile
Android Developer

0개의 댓글