민자의 지식창고

RxJava 본문

개발노트/Back-end

RxJava

전지적민자시점 2020. 8. 25. 16:02

RxJava는 Reactive Java의 줄임말입니다.

Reactive Programing 패러다임을 자바에서 구현한 라이브러리입니다.

구성요소는 아래와 같습니다.

  • OOP
  • Function
  • Imperative(명령형)
  • 기타등등...

여러가지 언어 중 Java는 OOP(Object Orientaed Programing)언어라고 불리며, 객체지향언어입니다.

Function Programing은 Python, nodejs가 있습니다. 

Java버전이 올라가면서 Reactive, Funtional한 프로그래밍 방법론으로도 개발이 가능하게 되었습니다

Reactive Programing?

기존 pull방식의 프로그래밍 개념을 Push 방식의 프로그래밍 개념으로 바꿉니다.
데이터를 실시간 집계시에 각 매장의 상태 변화를 데이터베이스에서 Pull로 가져 오는게 아닌, 데이터의 상태의 변화가 생길때마다 발생한 곳에서 새로은 데이터를 보내 push 방식으로 확인 한다

함수형 프로그래밍 지원을 받는다. 
 기존의 callback 함수, observe 패턴을 넘으려면 함수형 프로그램이 필요하며, 
기존 방식은 단일 스레드 환경에 문제가 없으나 멀티 스레드 환경에서 데드락, 동기화문제가 생깁니다.

정의 하면, 함수형 프로그래밍 도구를 활용한 비동기 프로그래밍 입니다

개념은 Observable과 Subscriber가 Reactive의 핵심적 요소 입니다.

java의 Observable 클래스 활용시

Observable<String> myObservable = Observable.create(
	new observable.OnSubscribe<String>(){
    @Override
    public void call(Subscriber<? super String> sub){
   	 	sub.onNext("hello world!");
        sub.onCompleted();
    	}
   }

 

Rxjava

  • 1.x에서는 Observable, single 클래스
  • 2.x에서는 Observable,Maybe, Flowable 클래스

Observable 클래스

Observe 패턴

객체의 변화가 있을때마다 메소드를 호출하여, 객체 직접 목록의 각 옵저버에게 변화를 알려줍니다.

 

RxJava의 Observable의 세가지 알림을 구독자에게 알립니다

onNext : Observable이 데이터의 발행을 알립니다. 

onComplete : 모든 데이터 발행을 완료 하였읍니다.

onError : 에러 발생. 실행 종료

 

팩토리 함수

Observable을 객체로 생성하는 팩토리 함수

 

  •  just() :인자로 넣은 데이터를 차례대로 발행 하고, Observable 생성
  • subscribe() : 내가 동작 시키기 원하는 것을 사전에 정의 해 둔 다음 실제 그것이 실행되는 시점을 조절
  • Disposable 객체
    • dispose() : observable에게 더이상 데이터를 발행하지 않도록 구독을 해지 하는 함수
    • isDisposed() : observable 데이터를 발행하지 않는지 확인하는 함수
  • ... 기타 등

리액티브의 연산자의 종류

  • map() : 함수 원하는 결과만 가져오는 역활,
    • map (ball -> ball +'*') : public final <R> observal <R> map (Function <? super T, ? extends R> mapper)
    •  
  • filter()함수 : 데이터만 걸러내는 역활
    • 필요없는 데이터는 제거하고 관심있는 데이터만 filter()함수를 통과
    • Predicated로 인자를 넣음. 
    • 비슷한 함수 : 
      • first(default) : observable의 첫번재 값을 필터. 값이 완료 되면 기본값 리턴
      • last() : 마지막값
      • take(N) :  최초 N개의 값만 가져옴
  • reduce() 함수 :  상황에 따라 발행된 데이터를 취함하여 어떤 결과를 만들어 낼 때, 최종 결과를 합성 할때,
    •  

..

 

리액티브 연산자 - 활용

 

interval()

timer()

range()

intervalRange()

defer()

repeat() : ping, heart beat등 서버가 살아있는지에 대해 유용함

 

변환연산자

...

 

 

스케줄러는 나중에 다시 글을 쓰겠습니다

참고 내용 - 본문은 아래에 있습니다. 해당 글이 문제가 있다면, 삭제 하도록 하겠습니다.

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?category=759183

 

[RxJava2] #1. 리액티브 프로그래밍과 RxJava

1. 리액티브 프로그래밍과 RxJava 1.1 리액티브 프로그래밍이란? 자바 언어와 리액티브 프로그래밍은 대략 두 가지 관계가 있다고 정리 할 수 있음. 기존 pull 방식의 프로그래밍 개념을 push 방식의 �

taeiim.tistory.com

 

728x90

'개발노트 > Back-end' 카테고리의 다른 글

BehaviorSubject  (0) 2020.08.25
RESTful API 활용  (0) 2018.06.20
Spring Framework1  (0) 2018.06.14