Learn & Run

RxJava - 예제를 통해 Reactive Programming 이해하기 본문

Java

RxJava - 예제를 통해 Reactive Programming 이해하기

iron9462 2021. 1. 6. 21:30

목표

 

간단한 예제를 통해서 리액티브 프로그래밍이 무엇인지 알아보고 이것을 사용하기 위해서 무엇을 알아야하는지도 알아보도록 합니다.

 

과거의 어플리케이션은 클라이언트와 서버의 작업간에 동기식 구조가 대부분이였습니다. 하지만 어플리케이션의 규모가 커지고 복잡해지면서 복잡한 비동기식 처리를 해야만하는 시대가 도래했다. 리액티브 프로그래밍은 이러한 비동기 처리를 효과적으로 처리하기 위해 사용되는 비동기 프로그래밍을 위한 API입니다. RxJava는 이러한 리액티브 프로그래밍을 확장하여 구현한 라이브러리입니다.

 

 

 

1. Reactive Programming의 정의

 

  • 정의 : In computing, reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change.
  • 번역 : 컴퓨팅에서 리액티브 프로그래밍은 데이터의 흐름과 변화의 전파와 관련된 선언적 프로그래밍 패러다임입니다.
  • 출처 : en.wikipedia.org/wiki/Reactive_programming
 

Reactive programming - Wikipedia

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,

en.wikipedia.org

  • 데이터 흐름과 변화의 전파 : 데이터가 변경 될 때 마다 이벤트를 발생시켜 데이터를 계속해서 전달합니다.
  • 선언적 프로그래밍 : 실행할 동작을 구체적으로 명시하는 명령형 프로그래밍과 달리 선언형 프로그래밍은 단순히 목표만을 선언합니다.

 

 

2. 명령형 프로그래밍 vs 선언형 프로그래밍

 

  • 아래의 간단한 예제를 통해서 서로의 차이점을 이해해봅니다.

각각의 메서드의 주석을 참고해보자.

 

 

 

3. 리액티브의 개념이 적용된 예시

 

  • Push 방식 : 데이터의 변화가 발생했을 때 변경이 발생한 곳에서 데이터를 보내주는 방식 (RTC, Socket, DB Trigger, Push Message)
  • Pull 방식 : 변경된 데이터가 있는지 요청을 보내 질의하고 변경된 데이터를 가져오는 방식 (Client - Server Model Application, Java) 

 

 

4. 리액티브 프로그래밍을 위한 선수지식

 

  • Observable : 데이터 소스
  • Operators : 데이터 소스로부터 전달받은 데이터를 가공하여 최종적인 결과 데이터를 만들어내는 역할
  • Scheduler : 스레드 관리자
  • Subscriber : Observable이 발행하는 데이터를 구독자 (구독하지 않으면 데이터를 전달받을 수 없음)
  • Functional Programming : RxJava에서 스레드 기반의 프로그래밍에서는 여러 스레드가 동시에 실행되기 때문에, 개발자가 예상하지 못하는 문제가 자주 발생한다거나 문제를 재현하는 것 조차 어려운 상황이 존재합니다. 다양한 이유로 Reactive Programming에서는 문제를 해결하기 위해 부수효과가 없는 순수 함수를 지향하는 함수형 프로그래밍기법을 도입게 되었고, 연산자는 함수형 프로그래밍 기법으로 작성되었습니다.

 

 

5. 샘플 소스 구성해보기 

 

간단한 예제를 통하여 리액티브 프로그래밍의 플로우를 느껴보도록 하자.