본문 바로가기
Rx

RxJava 시작!

by 봄석 2018. 12. 22.

본 내용은 필자가 학습한 내용을 정리하는 내용입니다.

대부분 의 내용이 아래 책의 내용이므로 원서를 구매해서 직접보시는걸 추천드립니다!

RxJava 프로그래밍 리액티브 프로그래밍 기초부터 RxAndroid까지 한 번에

유동환 , 박정준 지음 | 한빛미디어 | 2017년 09월 04일 출간

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788968488658&orderClick=LAV&Kc=


Reactive Programing이란 ?

데이터 흐름을 먼저 정의하고 데이터가 변경되었을 때 연관되는 함수나 수식이 업데이트되는방식

(데이터 흐름과 변화의전달에관한 프로그래밍 패러다임)


-기존의 pull방식의 프로그래밍 개념을 push방식의 프로그래밍 개념으로 바꾼다(콜백이나 옵서버 패턴같은)

-함수형 프로그래밍이 지원을 받는다. (부수효과를 방지하기위해 순수함수를 지향한다) 

           *부수효과:여러 스레드가 경쟁조건에 빠지게 되었을때 예측할수 없는 잘못된 결과가 나오는 현상



리액티브 프로그램은 주변의 환경과 끊임없이 상호작용을 하고, 프로그램이 주도하는 것이 아니라 환경이 변하면 이벤트를 받아 동작한다 .외부 요구에 반응에 맞춰 일하고 대부분 정확한 인터럽트 처리를 담당한다.



 프로그램 종류

 컴파일러와 수치계산 프로그램

상호작용 프로그램 

 리액티브 프로그램

동작 

주어진입력값을 바탕으로 

결과를 계산하는 프로그램 

프로그램이 주도하는 속도로

사용자와 상호작용하는 

프로그램 

프로그램이 주도하는것이 

아니라 환경이 변하면 이벤트를 받아 동작하는 프로그램 


RxJava란?

애플리케이션에서 리액티브 프로그래밍을 하려면 누군가 리액티브 프로그래밍을 할 수 있는 기반 시설을 제공해야한다.

즉,데이터 소스를 정의할 수 있고 그것의 변경 사항을 받아서 내 프로그램에 알려줄(push)존재로

그것을 .NET환경에서는 리액티브 확장이라하고 JVM위의 자바언어로 구현해놓은 라이브러리가 RxJava 이다!



RxJava가 필요한이유?

1) 동시성을 적극적으로 끌어안을 필요가있다.

 - 넷플릭스는 동시성으로 처리하기 위해 클라이언트의 요청을 처리할 때 다수의 비동기 실행흐름(스레드 등)을 생성하고 그거의 결과를     취합하여 최종 리턴하는 방식으로 내부로직을 변경했다.


2) 자바Future를 조합하기 어렵다는 점을 해결해야한다.

  - 자바8에서 제공하는 CompletableFuture 같은 클래스를 사용할수없어,클라이언트의 요청을 처리할 때 비동기 흐름을 조합할 방법이     없었다. RxJava 에서는 이를위해 비동기 흐름을 조합할수 있는 방법을 제공하고, 조합하는 실행단위를 리액티브 연산자라 한다.


3) 콜백 방식의 문제점을 개선해야 한다.

  - 콜백이 콜백을 부르는 상황이 발생하는데, 이는 코드의 가독성을 떨어뜨리고 문제발생시 디버깅을 어렵게한다. RxJava는 콜백을 사용하지 않는 방향으로 설계되었다.

 






                            





댓글