ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RxJava란?
    Java/RxJava 2022. 5. 25. 10:17

    Rx : Reactive Extention

    RxJava는 자바와 안드로이드를 위한 리액티브 프로그래밍 구현체로서 함수형 프로그래밍의 영향을 받았다. 

    • 리액티브 익스텐션(일반적으로는 Rx, 구체적으로는 RxJava)이 함수형 프로그래밍의 영향을 받았다고 해서 '함수형 리액트 프로그래밍'은 아님

    '리액티브 프로그래밍'이란 데이터나 이벤트 변화의 반응에 초점을 맞춘 프로그래밍을 뜻하는 일반적인 용어

    • 리액티브 함수형 프로그래밍이란 프로그래밍에 대한 하나의 접근 방식, 즉 명령형 시스템상의 추상화임
    • 동시성과 병렬성을 해결한다
      • 쉽게 말하자면? 콜백지옥에서 벗어나는 것

     

    언제 리액티브 프로그래밍이 필요한가 

    1. 마우스 움직임이나 클릭, 키보드 타이핑, GPS 신호, 자이로스코프 신호, 터치 이벤트 등을 처리할 때
    2. (요청이 시작되고 일정 시간이 지난 후 응답 여부에 따라 다른 작업이 진행되는) 본질적으로 비동기성ㅇ을 띠는 디스크나 네트워크 등 지연 바인딩 I/O이벤트 응답 
    3. 서버의 시스템, 이벤트나 앞서 나온 사용자 이벤트, 하드웨어 신호, 각종 아날로그 센서의 이벤트 트리거링 등 통제 불가능한 애플리케이션에서 발생하는 이벤트나 데이터를 다룰 때

     

    RxJava는 어떻게 동작하는가

    RxJava의 핵심은 데이터나 이벤트 스트림을 나타내는 Observable 타입이며, 밀어내기(reactive) 방식을 지향하지만 끌어오기(interactive) 방식으로도 사용 가능 

     

    Observable

    대부분의 Obserbable 함수 파이프라인이(비동기 방식이어야 하는 timeout, observeOn 등을 제외하고) 동기 방식인 반면 Observable 자체는 비동기 방식일 수 있다.

    RxJava Observable의 규약에 의하면 (onNext, onCompleted, onError) 이벤트는 동시에 방출되지 않는다.

    다른 말로 하면 하나의 Observable 스트림은 항상 직렬화되어 스레드에 안전해야 한다. 

    방출이 동시적이지 않는 한, 개별 이벤트들을 서로 다른 스레드에서 방출할 수 있다. 

    onNext 수행이 서로 꼬이거나 동시에 발생하지 않는다는 뜻이다. 만약 onNext가 하나의 스레드에서 여전히 수행되고 있다면 이를 다시 ㅎ출하지 않는 한 다른 스레드가 시작되지 않는다. 

    Observable.create(s->{
    	new Thread(() -> {
        	s.onNext("one");
            s.onNext("two");
            s.onNext("three");
            s.onNext("four");
        	s.onCompleted();
        }).start();
    });

    그렇다면 RxJava의 동시성이나 병렬성의 장점을 취하려면 어떻게 해야하는가? 구성을 사용해야 함 

    하나의 Observable 스트림은 항상 직렬화되어 있지만, 각각의 Observable 스트림을 서로 독립적ㄷ으로 조작할 수 있기 때문에 동시에 병렬 수행을 할 수 있음 

     

    동시성과 병렬성

    • 병렬성 : 동시에 수행하는 작업
    • 동시성  : 여러 작업들을 합성하거나 번갈아 수행한다는 뜻, 하나의 CPU가 여러 작업들을 처리한다면 동시에 실행은 맞지만 '시 분할'이므로 병렬 실행은 아님 

    댓글

Designed by Tistory.