티스토리 뷰

Android/RxJava

[RxJava2] 1. ReactiveX 란?

국산 앨런 2019. 7. 9. 17:01

RxJava를 배우기에 앞서 Java 붙은 Rx란 어떤 것인지에 대해서 먼저 알아보려고 합니다.

Rx(ReactiveX) 란 ?

비동기 이벤트 기반 프로그래밍 라이브러리


Observer 패턴 + Iterator 패턴      +      Functional 프로그래밍

 Reactive(비동기 이벤트 방식)                X(이벤트 처리 방식)   

 

 

여기서 Reactive(반응형) 프로그래밍 Functional(함수형) 프로그래밍이라는 개념이 나오네요... 먼저 이 개념들을 바로 잡고 넘어가 봅시다 ㅎㅂㅎ


Reactive(반응형) Programming ?

In computing, reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change. With this paradigm it is possible to express static (e.g., arrays) or dynamic (e.g., event emitters) data streams with ease, and also communicate that an inferred dependency within the associated execution model exists, which facilitates the automatic propagation of the changed data flow. - by Wikipedia

 

개념정리 할때 위키만큼 명확한 건 없는 것 같더라구요. 하지만 우리에겐 영어 자체가 명확하지 않기 때문에.... 번역을 해보면

 

반응형 프로그래밍이란 데이터의 흐름 과 변화의 전파에 중점을 둔 선언적 프로그래밍 패러다임. 정적 또는 동적인 데이터 흐름 을 쉽게 표현할 수 있으며, 데이터 흐름을 통해 연관된 실행 모델이 자동으로 변화를 전파할 수 있는 것을 의미함. -by Elonwiki

 

정의는 이렇다만 중요한 것은 로직이나 데이터를 하나의 흐름으로 봄으로써 기존에 우리가 다루기 어려웠던 비동기 작업을 쉽게 다루자는 것입니다. (복잡성 해소)

 

기존의 비동기 방식 Reactive비동기 방식

 비동기 작업 A를 하면 B를 한다.
(B는 Callback 또는 Interface 함수)

비동기 작업 A가 이벤트를 발행하면 B가 구독을 수행한다.
(B는 Observer)

 

반응형 프로그래밍에 대한 어느정도 이해가 잡히셨을 거라 믿고 ... 그렇다면 다음으로

 


 

Functional(함수형) Programming?

In computer science, functional programming is a programming paradigm—a style of building the structure and elements of computer programs—that treats computation as the evaluation of mathematical functions and avoids changing-state and mutable data. It is a declarative programming paradigm in that programming is done with expressions or declarations instead of statements.  - by Wikipedia

 

...네?

 

함수형 프로그래밍은 자료 처리를 함수의 연산으로 취급하고, 가변적인 상태나 데이터를 피하는 프로그래밍 패러다임. 명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하는 것과는 달리, 함수형 프로그래밍은 함수의 응용을 강조한다. 프로그래밍이 이 아닌 식이나 선언으로 수행되는 선언형 프로그래밍 패러다임을 따르고 있다. -by Elonwiki

 

뭔가.. 프로그래밍 패러다임이 어떻게 변해왔는지를 한번 볼 필요가 있어 보이네요.

 

명령형 프로그래밍 (절차형,객체지향.. 우리가 해오던 방식) 선언형 프로그래밍

작업을 이렇게 저렇게 수행해라.
데이터 상태를 변경해서 결과를 얻어내자.
(알고리즘을 명시)

특정 데이터가 되어라.
(목적을 명시)

 

//명령형 filter
fun filterImperative(arr:List<Int>): List<Int> {

    val newArray = arrayListOf<Int>()
    arr.forEach { if (it < 5) newArray.add(it)}
    return newArray

}

//함수형 filter
fun filterFunctional(arr: List<Int>): List<Int> = arr.filter { it < 5 }

 

 

Re) Functional(함수형) Programming

특정 데이터가 되어라 의 흐름의 연속

           (함수)                (스트림)


주어진 데이터에서 새로운 데이터를 반환 (과정은 안물안궁)

새로운 데이터를 반환하는 함수의 연속

 


 

Re) Rx(ReactiveX) 란?

Observable가 이벤트를 발행하면, Observer가 구독한다.

 

Observable

  • 이벤트 발행 주체
  • Observer를 구독시키면 (subscribe())
  • 이벤트 발생 시 구독 중인 Observer의 onNext를 수행
  • 타입
    • Observable : 최상위 기본타입.
    • Single : 1개의 데이터만 반환
    • Maybe : Null 가능성 있는 1개의 데이터 반환
    • Completable : 반환값 없이 수행 후 종료
    • Flowable : Backpressure

 

Observable				//Observable객체
	.just(true)			//발행할 Item 등록
    .subscribeOn(Schedulers.io())		//Observable의 작업 수행될 thread 지정, 중복될 경우 맨 마지막 것을 실행
    .observeOn(AndroidSchedulers.mainThread())		//Observable 이후의 operator, subscribe의 스케쥴러 설정
    .subscribe { res: Boolean -> 
    	print("res is : ${res}")		//Observer의 onNext 수행
     }

 

 

위는 정말 간단한 사용예시 입니다. subscribeOn, observeOn 에 들어가는 thread에 관한 내용은 차후에 다시 다루도록 하겠습니다.

다음 파트에서는  더 구체적인 예시로 RxJava2+Retrofit을 보도록 하겠습니다.

 

그럼 20000~~

 

-by RxJava Camp

'Android > RxJava' 카테고리의 다른 글

[RxJava2] 2. RxJava2 + Retrofit  (0) 2019.07.13
댓글
공지사항