Computer Science 2024. 4. 16. 23:03

Reactive Programming

목차
  1. 개요
  2. 예제 코드
  3. 주요 개념
  4. 활용 분야
  5. RxJava
  6. 참고 자료

개요

리액티브 프로그래밍은 데이터 스트림을 함수로 조작하고 비동기적으로 작업하는 프로그래밍 패러다임이다. 데이터 소스에서 발생하는 데이터 이벤트 스트림을 옵저버가 구독하여 처리한다.

리액티브 프로그래밍은 함수형 프로그래밍 개념을 활용하여 데이터 스트림을 선언적으로[각주:1] 처리하는 패러다임이다. 복잡한 비동기 프로그래밍을 단순화할 수 있다.

함수형 프로그래밍 (Functional Programming)

프로그램을 순수 함수(Pure Function)의 조합으로 구현하는 프로그래밍 패러다임

순수 함수 (Pure Fucntion)

  1. Deterministic: 동일한 입력에 대해서 항상 동일한 출력을 반환하고
  2. Side Effect 없음: 함수를 실행하며 외부 상태를 변경하지 않는 함수

비동기 프로그래밍 (Asychronous Programming)

프로그램의 실행 흐름이 한 작업을 기다라지 않고 다른 작업을 수행할 수 있도록 하는 프로그래밍 방식

 

예제 코드

Observable<Double> temperatureStream = temperatureSensor.getDataStream();

temperatureStream.subscribe(
	// 온도 센서에서 값이 업데이트 될 때마다 호출됨
    // UI의 온도 값을 변경
	value -> view.setTemp(value)
);

 

주요 개념

  1. 데이터 스트림: 데이터 소스에서 연속적으로 발생하는 데이터 이벤트 흐름이다.
    • 이벤트가 일정한 시간 간격으로 발생하지 않을 수도 있다
  2. 함수형 프로그래밍: 데이터 스트림을 필터링, 변환, 그룹핑 등의 함수로 조작한다.
  3. 비동기 옵저버: 데이터 스트림 처리 결과를 비동기적으로 구독하고 소비한다.
    • 선언적으로 작성된 Reactive 함수는 일종의 Wrapper이다. 라이브러리를 구현할 때는 복잡한 명령형 코드가 사용되었을 것이다.

 

활용 분야

리액티브 프로그래밍은 다음과 같은 분야에서 유용하다.

  • 모바일 개발
  • 데이터 처리
  • 실시간 UI 렌더링

 

(생각) 가상화폐 거래소에서 가상화폐 가격이 특정 수치를 돌파했을 때 사용자에게 알림을 주는 기능을 만들 때 활용할 수 있을 것 같다.

  1. 가상화폐의 가격은 여러 사용자가 실시간으로 거래하는 데이터에서 가장 최근 거래 결과로 결정된다. 이는 Data Stream으로 표현할 수 있다.
    • 끝이 없는 데이터이고, 데이터를 모아서 결과를 보여주는 것이 아니라 실시간으로 데이터의 변동과 파생되는 값의 변동을 보여줘야 하기 때문에 Data Stream으로 표현하기 적절한 데이터이다
  2. 가상화폐 가격이 동기적으로 계산되어서 DB에 거래 데이터를 저장한 후에 가격이 업데이트된다면 사용자에게 표시되는 가격에 시차가 크게 생긴다. 따라서 DB에 거래 데이터를 저장하는 로직은 비동기적으로 실행되어야 한다
  3. 사용자에게 알림을 주는 로직도 마찬가지로 비동기로 구현하여 가격 업데이트 등 다른 로직의 실행 시간에 영향을 주지 않는 것이 좋다. 
    • .filter()로 사용자가 지정한 가격 이상인 지 필터링한 다음 .first() 로 사용자에게 1회 알림을 주면 될 것 같다

 

RxJava

Java에서 리액티브 프로그래밍을 구현할 수 있는 라이브러리인 RxJava를 통해 다양한 연산자를 사용할 수 있다.

  • .filter()
    • 데이터 스트림에서 특정 조건을 만족(람다 함수 return 값이 true)하는 항목만 통과시킨다
    • 사용하면 데이터 스트림의 항목 개수가 줄어든다
  • .map()
    • 데이터 스트림의 각 항목을 새로운 항목(람다 함수의 return 결과)로 변환한다
    • 항목이 1:1 mapping 되기 때문에 전체 항목의 개수는 변하지 않는다
  • .debounce()
    • 연속된 키보드 입력이 끝날 때 자동완성 결과를 보여주는 것처럼 연속적으로 호출(emit)되면 실행하지 않다가 일정 시간 동안 호출되지 않을 때 실행한다

 

참고 자료

Intro to Reactive Programming by Jordan Jozwiak of Google - CS50 Tech Talk

 

 

  1. 원하는 결과를 선언하며, 구체적인 실행 단계를 명시하지 않은 프로그래밍 방식. 명령형 코드를 wrap하여 구현한다. [본문으로]
저작자표시 (새창열림)

'Computer Science' 카테고리의 다른 글

[DB] MySQL에서 WHERE IN, JOIN, EXISTS의 성능 비교  (0) 2024.07.05
[Network][스크랩] Bearer Authentication 헤더 규칙이 정해진 배경  (0) 2024.06.24
[Network] HTTP response status code  (0) 2024.04.06
[Network] REST API - Naming Convention, Best Practice  (0) 2024.04.06
[Network] REST API  (0) 2024.04.06
  1. 개요
  2. 예제 코드
  3. 주요 개념
  4. 활용 분야
  5. RxJava
  6. 참고 자료
'Computer Science' 카테고리의 다른 글
  • [DB] MySQL에서 WHERE IN, JOIN, EXISTS의 성능 비교
  • [Network][스크랩] Bearer Authentication 헤더 규칙이 정해진 배경
  • [Network] HTTP response status code
  • [Network] REST API - Naming Convention, Best Practice
이우진 기술 블로그개발자 이우진의 기술 블로그입니다
개발자 이우진
이우진 기술 블로그
  • All (86)
    • Spring Framework (20)
    • MSA (7)
      • Event Driven Architecture (3)
    • Java (3)
    • Flink (2)
    • Computer Science (9)
      • Object Oriented Programming (3)
    • Problem Solving (15)
    • Design Pattern (0)
    • React (4)
    • Javascript (2)
    • Web (3)
    • Tools & Environment (3)
    • C++ (2)
    • misc (5)
    • Essay (3)
      • 기술 회고 (5)
  • 홈
  • 태그
  • 관리자
  • 글쓰기
hELLO · Designed By 정상우.v4.2.2
Reactive Programming
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.