[RxJava] 리액티브 프로그래밍이란?

2 minute read

Rx공부 해야지 해야지 미루다가 드디어 RxJava공부 시작!!

주문했던 책을 이제서야 펼쳐봤는데, ReactiveX가 뭔지, 반응형프로그래밍이 뭔지 잘 모르겠어서 얄코님의 유튜브를 참고해서 정리해봤다.(설명이 아주 자세하고 잘되어있으니 추천!!)

반응형 프로그래밍이 뭔데??

: 일단 얘의 단짝친구 함수형 프로그래밍을 알아보자!

함수형 프로그래밍

: 코딩중 오류의 소지가 될 수 있는 변수의 사용을 지양하고 순수함수를 사용하는 프로그래밍 방식

image

count나 result, i 같이 프로그램 실행중 값이 바뀔 수 있는 변수를 사용 → 이러한 변수들을 사용자가 그때그때 바꿔주지않거나, 멀티스레딩 환경에서는 둘 이상의 스레드가 한 변수에 접근할때 제대로된 조치를 취하지않는다면 파악하기 복잡한 오류가 발생할 위험이 있음 !(side-effect)

image

이처럼 외부의 데이터를 변경하지않고 받아온 값들을 내부에서 처리하여 밖으로 반환하는 이런 방식을 함수형 프로그래밍 방식이라고 한다.

자바언어로 리액티브 프로그래밍을 하기 위해서는 함수형 프로그래밍의 지원이 필요하고, 반응형 프로그래밍에서는 직접 구현하다기보다는 이미 만들어진 순수함수들(filter, slice, map, join 등)을 주로 가져다 쓴다 ! 그래서 다양한 순수함수들이 무엇인지 언제 쓰이는지 잘 알아둬야한다고 한다.

image

다음 예시는 javascript로 짜여진 반응형프로그래밍의 예시인데, 오른쪽 그림에서 여러개의 동그라미들 (코드에서는 1~20까지의 숫자)은 Observable 즉 관찰되는 대상이고, 관찰대는 대상에 적용하는 filter, take등 여러 함수들은 Operators 즉 파이프라인, 마지막으로 파이프를 쳐다보며 결과가 나왔을때 그 결과를 최종 실행하는 Observer로 이루어져있다는것을 볼 수 있다.

구성요소

  • Observable

    : 일련의 값들을 발행 (관찰되는 대상) = stream

  • Operators

    : 순수 함수들 (관찰되는 대상들을 변형시킴) = 파이프

  • Observer

    : 파이프만 쳐다보며 값을 기다리다가 뭔가 나오는대로 최종 작업 실행 = subscribe !

스트림으로부터 나오는 값들에 구독자가 반응해서 특정 작업들을 처리 ⇒ 반응형프로그래밍!!!!

쓰면 좋은점 !

: 이러한 단순한 배열 뿐만 아니라 네트워크,비동기, 애니메이션 등 다양한 것들을 파이프라인으로 처리할 수 있다!

RxJava를 만들게 된 이유

  1. 자바가 동시성 처리를 하는 데 번거로움이 있기 때문
  2. 2013년 당시 Java에서는 비동기 흐름을 조합할 방법이 거의 없었다.
  3. 비동기 방식으로 동작하는 가장 대표적인 프로그래밍 패턴으로는 콜백이 있는데, 콜백이 콜백을 부르는 콜백지옥은 코드의 가독성을 떨어뜨리고 문제 발생 시 디버깅을 어렵게 만들기 때문에 이를 해결하기 위해!

다음과 같은 이유들로 RxJava가 탄생된것이다.

예시

본격적으로 RxJava의 예시를 살펴보자

import io.reactivex.rxjava3.core.Observable;

public class FirstExample {
    public static void main(String args[]) {
        FirstExample demo = new FirstExample();
        demo.emit();
    }

    public void emit() {
        Observable.just("Hello ", "RxJava 2!!")
//              .subscribe(System.out::println);
                .subscribe(data -> System.out.println(data));
    }
}
Hello 
RxJava 2!!
  • Observable 클래스

    : 데이터의 변화가 발생하는 데이터 소스 (리액티브 프로그래밍의 시작)

  • just()

    : Observable클래스의 가장 단순한 Observable 선언 방식! Integer와 같은 래퍼타입부터 사용자 정의 클래스의 객체도 인자로 넣을 수 있다.

  • subscribe()

    : Observable을 구독, Observable 은 subscribe()를 호출해야 비로소 변화한 데이터를 구독자에게 발행한다.

  • emit()

    : RxJava개발 문서에는 Observable이 subscribe()함수를 호출한 구독자에게 데이터를 발행하는 것을 표현하는 용어로 자주 사용된다.

리액티브 프로그래밍이 뭔지 어떻게 사용하는건지 맛만 본 기분이다. 다음엔 Observable 에 대해 좀 더 자세히 알아보자


Comments