일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 자바스크립트
- spring boot
- Cold Publisher
- github
- CLI
- Hot Publisher
- OS
- 멘토링 후기
- CPU Scheduling
- RxJava
- Round Robin
- 생활코딩
- 디프만
- 큐시즘
- js
- time slice
- 마블 다이어그램
- flab
- js 개발자라면 알아야하는 핵심 컨셉
- 원격 저장소
- 에프랩
- Git
- Hot Publish
- 건국대학교
- 버전관리
- Depromeet
- spring
- Observable
- 파이썬
- OOAD
- Today
- Total
글쓰는 개발자
[RxJava] 리액티브 프로그래밍? 본문
목차
Reactive Programming?
In computing, reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change.
컴퓨팅에서 반응형 프로그래밍은 데이터 스트림 및 변경 전파와 관련된 선언적 프로그래밍 패러다임입니다.
간단하게, Reactive Programming이란 데이터 변경 이벤트를 감지하여 stream으로 흘려보내는 행위를 선언적 프로그래밍 방식으로 사용하는 프로그래밍 패러다임이다.
선언적 프로그래밍
선언적 프로그래밍은 명령형 프로그래밍에 대조적인 의미로 사용되어, 특정 로직을 수행하는 방법이 아니라 단순히 해야 하는 행위만 서술하는 형태로 프로그래밍 하는 것을 의미한다.
리스트에서 홀수만을 출력하는 다음 예시를 보면 더 쉽게 이해할 수 있다.
/* 홀수 출력하기 */
/* 명령형 프로그래밍 방식 */
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
for (int number : numbers) {
if (number % 2 != 0)
System.out.println(number);
}
}
/* 홀수 출력하기 */
/* 선언형 프로그래밍 방식 */
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
.filter(number -> number % 2 != 0)
.forEach(System.out::println);
}
위와 같이, 선언형 프로그래밍 방식을 사용하면 코드가 어떤 로직을 수행하려 하는지 한눈에 파악할 수 있기 때문에 이미 널리 사용되고 있다.
데이터 변경 감지
데이터 변경 감지 패턴의 대표적인 예가 Push 방식이다.
Push 방식은 데이터 변경이 발생했을 때, 변경이 발생한 곳에서 이벤트와 같은 데이터를 생성해 보내고 이 데이터를 흔히 consumer와 같은 소비 주체에서 받아 처리한다.
이와 같은 예시로 아래의 항목들이 있겠다.
- RTC(Real Time Communication)
- 소켓 프로그래밍
- DB Trigger
- Spring Application Event
- Angular 데이터 바인딩
- 스마트폰 Push Message
Reactive Programming 필수 요소
- Observable: 데이터를 발행하는 데이터 소스의 역할
- 리액티브 연산자(Operators): 데이터 소스를 처리하는 함수. 데이터 소스로부터 데이터를 전달받아서 최종적인 결과 데이터를 생산한다.
- 스케쥴러(Scheduler): 스레드 관리자. 데이터 스트림을 처리할 스레드를 지정하고 관리하는 역할
- Subscriber: Observable이 발행하는 데이터를 구독하는 구독자. 최종적으로 데이터를 처리하는 데이터 소비 주체이다.
- 함수형 프로그래밍: 함수형 프로그래밍 패러다임 하에서 설계된 reactive operator를 사용하여 프로그래밍
예제
다음은 Observable의 사용 예시이다.
import io.reactivex.Observable;
import io.reactivex.schedulers.Schedulers;
public class ToDoSample {
public static void main(String[] args) throws InterruptedException {
Observable.just(100, 200, 300, 400, 500)
.doOnNext(ToDoSample::printDataWithThreadName)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation())
.filter(num -> num > 300)
.subscribe(ToDoSample::printDataWithThreadName);
Thread.sleep(500);
}
public static void printDataWithThreadName(int data) {
String print = String.format("%s: %d", Thread.currentThread().getName(), data);
System.out.println(print);
}
}
- just: 데이터(100 ~ 500)를 발행한다.
- doOnNext: 데이터가 발행될 때, 각각의 데이터에 대해 doOnNext의 파라미터로 전달된 Consumer(printDataWithThreadName)를 실행한다.
- subscribeOn: 데이터 발행 스레드를 지정한다.
- observeOn: 데이터 가공, 구독 스레드를 지정한다
위와같이, Reactive Programming 요소들을 적절히 사용하면 가독성 높은 비동기 함수형 프로그래밍 코드를 손쉽게 작성할 수 있다.
참고: https://www.inflearn.com/course/자바-리액티브프로그래밍-1
Kevin의 알기 쉬운 RxJava 1부 - 인프런 | 강의
리액티브 프로그래밍이라는 진입 장벽을 넘고 싶으신가요? Kevin의 알기 쉬운 RxJava가 그 벽을 넘을 수 있는 힘을 키워드리겠습니다., - 강의 소개 | 인프런...
www.inflearn.com
'Development > Java' 카테고리의 다른 글
[RxJava] Single, Maybe, Completable (0) | 2022.09.26 |
---|---|
[RxJava] Flowable과 Observable (0) | 2022.09.25 |
[RxJava] Reactive Streams (0) | 2022.08.25 |