본문 바로가기

프로그래밍 서적/RxJava 프로그래밍

1. 리액티브 프로그래밍 소개

반응형

너무나도 대세가 되고 너무나도 많이 쓰는 ReactX Java 를 이제나마 공부하려 합니다. 늦은감이 없지않아 있지만,


제 경력을 생각하면 적기?인거같기도 하네요. (아직 1년차를 향해 달려가는 주우우우우우우우우우니어니까요!ㅋㅋ)


이제부터 RxJava 보라돌이 책을 보고 정리해가며 공부를 시작하겠습니다.


1.1 리액티브 프로그래밍

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

        기존 명령형(imperative) 프로그래밍은 절차에 따라 순서대로 실행 => 이벤트 변경 시 새로 계산하는 "Pull" 방식

        데이터 흐름을 먼저 정의하고 데이터가 변경되었을 때 연관되는 함수나 수식이 업데이트 되는 방식 => 이벤트 변경 시 데이터를 밀어주는 "Push" 방식(일종의 "옵서버" 패턴)


        1.1.1 자바 언어(객체지향)와 리액티브 프로그래밍(함수형))

            두 가지 관계 

                1. 기존 pull 방식의 프로그래밍 개념을 push 방식의 프로그래밍 개념으로 바꾼다.

                2. 함수형 프로그래밍의 지원을 받는다.

            콜백이나 옵서버 패턴은 옵서버가 1개이거나 단일 스레드 환경에서는 문제가 없지만, 멀티 스레드 환경에서는 많은 주의가 필요!(데드락과 동기화 문제)

                -> 같은 자원에 여러 스레드가 경쟁 조건(race condition)에 빠지게 되었을 때 예측할 수 없는 문제가 발생.(= 부수효과)

            함수형 프로그래밍은 부수효과(side effect)가 없음 => 순수 함수(pure function)을 지향 => 멀티 스레드 환경에서도 안전

        

        1.1.2 리액티브 프로그래밍 개념 잡기

            "컴퓨터 프로그램에는 크게 3가지 종류가 있습니다. 

            첫 번째는 "변환 프로그램"으로 주어진 입력값을 바탕으로 결과를 계산하는 프로그램입니다. 컴파일러와 수치계산 프로그램이 예입니다.

            두 번째는 "상호작용 프로그램"으로 <b>프로그램이 주도하는 속도</b>로 사용자 혹은 다른 프로그램과 상호작용 합니다. 사용자의 관점으로 볼 때 시분할(time-sharing) 시스템은 상호작용 프로그램입니다.

            세 번째는 <b>리액티브 프로그램</b>은 주변의 환경과 끊임없이 상호작용 하는데 <b>프로그램이 주도하는 것이 아니라 환경이 변하면 이벤트를 받아 동작</b>합니다. 

            상호작용 프로그램은 자신의 속도에 맞춰 일하고 대부분 통신을 담당합니다. 반면 리액티브 프로그램은 외부 요구에 반응에 맞춰 일하고 대부분 정확한 인터럽트 처리를 담당합니다."


            보통 우리 앱은 변환 프로그램이거나 상호작용 프로그램이며, 인터럽트 같은 개념은 시스템 프로그래머가 담당. 클라이언트의 요청을 처리하는 서버 프로그래밍은 리액티브 프로그래밍에 가까움.


            즉, 데이터 소스를 정의할 수 있고 그것의 변경 사항을 받아서 내 프로그램에 알려줄(push) 존재가 필요 => jvm위의 자바 언어로 구현해놓은 라이브러리가 바로 "RxJava"이다.


1.2 RxJava를 만들게 된 이유

        넷플리스 왈 

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

            2. 자바 Future를 조합하기 어렵다는 점을 해결해야 한다(Java Futures are Expensive to Compose).

            3. 콜백 방식의 문제점을 개선해야 한다(Callbacks Have Their Own Problems).

        

1.3 RxJava 처음 시작하기

1.4 RxJava를 어떻게 공부할 것인가

        자바는 전통적인 스레드 기반의 프로그매이

        Rxjava는 비동기 프로그래밍을 위한 "라이브러리"라서 개념과 접근 방식이 다름

        공부 순서 :

            1. Observable class를 명확하게 이해. 뜨거운 Observable(Hot Observable)과 차가운 Observable(Cold Observable)의 개념을 꼭 이해!

            2. 간단한 예제로 map(), filter(), reduce(), flatMap() 함수의 사용법을 익히자.

            3. 생성 연산자, 결합 연산자, 변환 연산자 등 카테고리별 주요 함수를 공부

            4. 스케쥴러의 의미를 배우고 subscribeOn()과 observeOn() 함수의 차리를 알아 둡니다.

            5. 그 밖의 디버깅, 흐름 제어 함수를 익힙니다.


1.5 마블 다이어그램 보는 법

        RxJava를 이해하는 핵심 도구. map(), flatMap() 함수 등의 수많은 리액티브 연산자들을 이해하는 데 큰 도움을 줍니다.


1.6 마치며




여기까지가 1장입니다. 끝까지 화이팅! 코틀린도 해야하는데...

반응형

'프로그래밍 서적 > RxJava 프로그래밍' 카테고리의 다른 글

2. Observable 처음 만들기  (0) 2018.12.07