티스토리 뷰
In computing, reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change.
('변화의 전파와 데이터 흐름'과 관련된 '선언적 프로그래밍' 패러다임이다.)
From 위키피디아
- 변화의 전파와 데이터 흐름 : 데이터가 변경될 때 마다 이벤트를 발생시켜서 데이터를 계속적으로 전달한다.
- 선언적 프로그래밍 : 실행할 동작을 구체적으로 명시하는 명령형 프로그래밍과 달리 선언형 프로그래밍은 단순히 목표를 선언한다.
명령형 프로그래밍 vs. 선언형 프로그래밍
리액티브의 개념이 적용된 예
- Push 방식 : 데이터의 변화가 발생했을 때 변경이 발생한 곳에서 데이터를 보내주는 방식
- RTC (Real Time Communication)
- 소켓 프로그래밍
- DB Trigger
- Spring의 ApplicationEvent
- Angular의 데이터 바인딩
- 스마트폰의 Push 메시지
- Pull 방식 : 변경된 데이터가 잇는지 요청을 보내 질의하고 변경된 데이터를 가져오는 방식
- 클라이언트 요청 &서버 응답 방식의 애플리케이션
- Java와 같은 절차형 프로그래밍 언어
리액티브 프로그래밍을 위해 알아야 될 것들
- Observable : 데이터 소스
- 지속적으로 변경이 가능한 데이터의 집합
- 리액티브 연산자(Operators) : 데이터 소스를 처리하는 함수
- 스케쥴러(Scheduler) : 스레드 관리자
- Subscriber : Observable이 발행하는 데이터를 구독하는 구독자
- 함수형 프로그래밍 : RxJava에서 제공하는 연산자(Operator) 함수를 사용
- 변수가 필요 없는 순수 함수를 지향하는 프로그래밍
예시
- 데이터를 발행하고
- 데이터를 처리하고
- 데이터 구독해서 처리한다.
public static void main(String[] args) throws InterruptedException {
Observable.just(100, 200, 300, 400, 500)
.doOnNext(data -> System.out.println(getThreadName() + " : " + "#doOnNext() : " + data))
.subscribeOn(Schedulers.io()) // 데이터의 발행과 흐름을 결정짓는 스레드를 결정
.observeOn(Schedulers.computation()) // 발행된 데이터를 가공하고 처리하는 스레드를 결정
.filter(number -> number > 300)
.subscribe(num -> System.out.println(getThreadName() + " : result : " + num));
Thread.sleep(500); // ioThread로 동작을 시키면 main 함수가 바로 종료되버리기 때문에 0.5초 정도 기다리게 하여 함수 종료를 지연시킨다.
}
public static String getThreadname() { return Thread.currentThread().getName(); }
반응형
'Programming > 기타' 카테고리의 다른 글
클린 아키텍처 (0) | 2021.09.16 |
---|---|
Delegate 패턴 (feat. Java 코드) (0) | 2021.09.05 |
함수형 프로그래밍 간단 요약 (feat. 깡샘) (0) | 2021.04.25 |
MVC, MVP, MVVM 디자인 패턴 간단 정리 (0) | 2021.04.16 |
"모바일 프로그래머"가 갖추어야 할 필수 역량 (0) | 2021.04.09 |
댓글