Reactive Programming(반응형 프로그래밍) 이란?
주변환경과 끊임없이 상호 작용을 하는 프로그래밍을 의미하며, 프로그램이 주도하는 것이 아닌 환경이 변하면 이벤트를 받아 동작하도록 만드는 프로그래밍 기법을 말한다. 외부 요구로부터 끊임없이 반응하고 처리한다.
명령형 프로그래밍 vs 반응형 프로그래밍
명령형 프로그래밍은 작성된 코드가 정해진 순서대로 실행되는 방식의 프로그래밍을 의미한다.
코드가 순서대로 실행되므로 개념적으로 친밀하고, 직접적으로 구체화하여 이해하기 쉽다.
순서대로 실행된다는 것은 개발자가 작성한 조건문,반복문 또는 함수 호출에 의해 컴파일러가 다른 코드로 이동하는 것을 뜻한다.
예제 코드(명령형 프로그래밍)
@Test
fun `imperative programing`() {
val items = ArrayList<Int>()
items.add(1)
items.add(2)
items.add(3)
items.add(4)
for(i in items) {
if( i % 2 == 0) {
println(i)
}
}
}
위의 코드는 다음과 같이 정리할 수 있다.
- ArrayList를 생성한다.
- ArrayList에 1~4 까지 아이템을 순차적으로 추가한다.
- 반복문을 통해 짝수를 출력한다.
실행 결과
2
4
반응형 프로그래밍은 시간순으로 들어오는 모든 데이터의 흐름을 스트림으로 처리하며, 하나의 데이터 흐름은 다른 데이터 흐름으로 변형되기도 하고, 여러 데이터 흐름이 하나의 데이터 흐름으로 변경될 수도 있다.
예제 코드(반응형 프로그래밍)
@Test
fun `reactive programing`() {
val items = PublishSubject.create<Int>()
items.onNext(1)
items.onNext(2)
items.onNext(3)
items.onNext(4)
items.filter { item -> item % 2 == 0 }
.subscribe { item -> println(item) }
items.onNext(5)
items.onNext(6)
items.onNext(7)
items.onNext(8)
}
위의 코드는 다음과 같이 정리할 수 있다.
- 데이터 스트림을 만든다. (PublishSubject)
- 데이터 스트림에 1~4까지 순차적으로 추가한다.
- 데이터 스트림에서 짝수만 출력하는 데이터 스트림으로 변형한 뒤 구독한다.
- 데이터 스트림에 5~8까지 순차적으로 추가한다.
실행 결과
6
8
즉 구독을 통해 환경 변화에 대한 이벤트를 받게끔 설정 하고,
새로운 값이 순차적으로 추가되면서 환경 변화에 대한 이벤트를 받아 동작을 했다.
PublishSubject는 구독 시점 이후의 데이터만 옵서버에 전달하는 특징이 있다.
그러므로 2, 4, 6, 8 이 아닌 6,8 만 출력 된다.
구독 시점 이전의 데이터도 출력되길 원하면 ReplaySubject로 대체할 수 있다.
'안드로이드 > RxJava' 카테고리의 다른 글
[android/안드로이드] RxJava란? (0) | 2022.06.01 |
---|