[RxJava] Reactive Programming

Jay·2020년 12월 16일
0

RxJava

목록 보기
2/7
post-thumbnail

이번 글에선, rx에 대한 사용, 활용 등이 아닌 왜 rx일까?
왜 우리가 rx를 써야할까?에 대해서 써보고자.

왜 비동기 작업을 해야할까?

사용자 경험 향상을 위해서.

  • 사용자는 어플을 사용하는데에 있어서 중간에 어플이 멈추거나 느려지는 것을 원하지 않는다.
  • 즉, 메인 스레드에서 너무 많은 작업을 하면 어플이 느려지거나 멈출 수 있다는 것이다.
  • 무겁고 복잡한 작업은 서버에서 처리하길 원한다. 그렇기에 비동기 작업이 필요하다.

The Evaluation Matrix

비동기 라이브러리를 위한 평가 매트릭스로 아래 4가지

1. 명시적 실행(Explicit execution)

  • 새로운 스레드 작업이라면, 그것을 컨트롤 할 수 있어야 한다.
  • 백그라운드 작업의 경우, 정보를 모으고 시작해야 한다.

2. 쉬운 스레드 관리(Easy thread management)

  • 비동기 작업에선 스레드 관리가 핵심이다.
  • 백그라운드에서 작업하고 UI업데이트를 위해 메인 스레드로 넘겨야 하는 경우가 있다. 그래서 쉽게 스레드 전환이 중요하다.

3. 쉬운 구성력 (Easily composable)

  • 이상적으로, 비동기 작업을 생성하고 백그라운드 작업으로 시작하면, 다른 어떤 스레드(UI스레드)에 의존하지 않고 작업이 끝날 때까지 독립적으로 유지하는 게 좋다.
  • 하지만, 실제로 DB업데이트, UI 변경 등 상호 의존적일 수 밖에 없다. 그래서 비동기 라이브러리는 쉽게 구성하여야 하고 오류가 적어야 한다.

4. 부작용 최소화 (Minimum side effects)

  • 멀티 스레드가 수행되는 동안, 스레드 서로 간 영향을 끼치는 부작용을 최소화 해야 한다.

리액티브 프로그래밍이란?

(Reactive Programming..?)

  • 데이터 흐름과 변화 전파에 중점을 둔 프로그래밍 패러다임
  • 프로그래밍 언어로 정적, 동적인 데이터 흐름을 쉽게 표현할 수 있어야 한다.
  • 데이터 흐름을 통해 하부 실행 모델이 자동으로 변화를 전파 할 수 있는 것.

즉, 하나의 컴포넌트로부터 전파가 되며 '데이터 변화 수신자'로 등록된 다른 컴포넌트에게 변화를 전파한다.

Rx = Observable + Observer + Schedulers`

Observable

  • 데이터 스트림. 하나의 스레드에서 다른 스레드로 전달할 데이터를 압축한다.

  • 주기적으로 또는 설정에 따라 생애 주기 동안 한 번만 데이터를 방출한다.

  • 쉽게 생각하면 공급자 이다. 데이터를 처리하고 다른 구성 요소에 전달한다.

Observer

  • Observable에 의해 방출된 데이터 스트림을 소비한다.

  • SubscribeOn() 메서드를 사용해서 observable을 구독하고 observable이 방출하는 데이터를 수신한다.

  • Observable이 데이터를 방출할 때마다 등록된 모든 Observer는 onNext() 콜백으로 데이터를 수신한다.

  • JSON 응답 파싱이나 UI 업데이트와 같은 작업을 수행한다.

Schedulers

  • Rx는 비동기 프로그래밍을 위한 것이고 그렇기에 우린 스레드 관리가 필요하다.

  • Schedulers는 Observable과 Observer에게 실행되어야 할 스레드를 알려주는 구성요소이다.

  • observeOn()에서 Observers에게 관찰해야 할 스레드를 알려줄 수 있다.

  • scheduleOn() 메서드로 observable이 실행해야 할 스레드를 알려줄 수 있다.

  • Schedulers.io()는 IO 스레드에서 코드를 실행한다.

EX)

아래와 같이 구성할 수 있다.

database.subscribeOn(Schedulers.newThread()) //Observable runs on new background thread.

.observeOn(AndroidSchedulers.mainThread()) //Observer will run on main UI thread.

.subscribe(observer); //Subscribe the observer
  • subscribeOn(Schedulers.newThread())
    : database observable에게 백그라운드에서 실행 하라고 말한다.

  • observeOn(AndroidSchedulers.mainThread())
    : observer에게 메인 스레드에서 실행하라고 말한다.

profile
Android Developer - Come to my medium (https://medium.com/@wodbs135)

0개의 댓글