본문 바로가기
2023년 이전/ReativeX

ReactiveX - Reactive Programming

by JeongUPark 2019. 10. 18.
반응형

[이 글은 RxJava 프로그래밍 : 리액티브 프로그래밍 기초부터 안드로이드까지 한번에 책을 공부하면서 정리한 내용입니다.]

출처: https://jeongupark-study-house.tistory.com/39 [공부!공부! 공부합시다!!!]

ReactiveX는 무엇일까?

ReactvieX 공식 사이트에서 Introduce 첫줄을 보면 'ReactiveX는 관찰 가능한 시퀀스를 사용하여 비동기 및 이벤트 기반 프로그램을 작성하기위한 라이브러리입니다.' 라고 한다.  즉, 반응형 프로그래밍(Reactive Programming)을 도와주는 Library 입니다.

 

여기서 반응형 프로그래밍이란  Reactive programming is programming with asynchronous data streams. 라고 해석하면 비동기적 데이터 흐름을 처리하는 프로그래밍입니다. 사실 확 와닿지 않는 문구 입니다. 그래서 간단한 예를 들어 설명하며, 검색창에 검색어를 입력할 때마다 관련 검색어가 나온다던지, 어떤 글에 나는 좋아요를 누르지 않았는데 누군가 눌려서 좋아요 갯수가 올라가는 등 실시간으로 변경되는 것을 생각하면 이해가 편할 것같습니다.

 

다시 설명하면 Reactive programming은 데이터 흐름과 전달에 관한 프로그래밍 패러다임 입니다. 데이터 흐름을 먼저 정의하고 데이터가 변경되었을 때 연관되는 함수나 수식이 업데이트되는 방식 입니다. 즉, 데이터 소스가 변경된 데이터를 밀어주는 방식으로 일종의 옵저버 패턴이라 생각하면 됩니다.

(더 자세한 설명은 영어버전, 한국어버전에서 확인하시면 됩니다. 설명이 정말 잘되어 있습니다.)

그리고 ReactiveX는 이런 실시간변화를 주기 위한 프로그래밍을 도와주는 라이브러리고 RxJava, RxSwift, RxJS, RxKotlin 등 다양한 언어를 지원합니다. (ReactiveX의 더 자세한 내용은 Reactivex 홈페이지에서 확인하세요 )

 

그럼 프로그래밍의 기본 Hellow World를 출력해 보겠습니다.

우선 전 gradle 시스템을 사용하기 때문에 build.gradle에 다음을 추가해 줍니다. (작성 시 최신 버전이 2.4.0이 었습니다.)

implementation("io.reactivex.rxjava2:rxkotlin:2.4.0")

그리고 다음과 같이 작성 후 실행합니다.

fun main() {

    Observable.just("Hello", "RxKotlin")
        .subscribe(System.out::println)
}

 

실행하면  위의 결과를 얻습니다.

 

  • Observable 클래스는 데이터의 변화가 발생하는 데이터 소스로 위의 검색창에 검색어 입력 시 입력되는 검색어로 볼수 있습니다. Reactive Programming은 이 Observable 클래스에서 시작됩니다.
  • Observable.just()는 가장 단순한 Observable 선언 방식입니다. 위에서는 데이터 소스에서 Hello와 RxKotlin이 발생했습니다.
  • subscribe()는 Observable을  구독합니다. Observable은 subscribe() 함수를 호출해야 비로소 변화한 구독자에게 발행합니다.
  • System.out::println은 수신 한 데이터를 System.out::println를 통하여 노출한다는 의미 입니다. 만약 이를 사용하지 않는다면 다음과 같이 사용해도 됩니다.
 Observable.just("Hello", "RxKotlin")
        .subscribe { data -> println(data) }

 

 

참조

ReactiveX 홈페이지 : http://reactivex.io/

책 - RxJava 프로그래밍 : 리액티브 프로그래밍 기초부터 안드로이까지 한번에 

(Yes24 북클럽을 사용중인데, 이곳에 있어서 kotlin으로 coding을 했지만, 이 책으로 공부하였습니다.)

반응형