일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Jetpack Room
- flow buffering
- 1753 다익스트라
- 1806 백준
- 1644 파이썬
- 2096 파이썬
- 백준 1644
- 10819 파이썬
- 1003 파이썬
- 백준 10819
- 백준 5582
- 코루틴 플로우
- 5582 DP
- 1753 파이썬
- Coroutine Flow
- 1806 투포인터
- android hilt
- 6588 파이썬
- git local remote
- 1806 파이썬
- 5582 파이썬
- 백준 2096
- java
- 투포인터 알고리즘
- 자바
- 안드로이드 hilt
- Android mvp
- 자료구조
- Android Room
- 이진 탐색
- Today
- Total
Gemstone's Devlog
[RxJava] 반응형 프로그래밍 이해하기 본문
명령형 프로그래밍은 컴퓨터에게 무엇을 하라고 명령하는 것이다.
예를 들어 1, 2, 3을 출력하는 명령형 프로그램을 만든다고 해보자.
println("count : 1")
println("count : 2")
println("count : 3")
반응형 프로그래밍은 어떨까? (처음엔 이해하기 힘들 수도 있다.)
먼저 PublishSubject를 이용한 데이터 발행자(Publisher)를 만든다.
우선은 자세히 알필요는 없고, 그냥 PublishSubject가 자신을 구독하는 구독자에게 변수를 발행(Publish)한다는 것만 알면 된다.
val publisher: PublishSubject<String> = PublishSubject.create()
publisher 라고 명명된 변수는 자신을 구독하는 구독자에게 값을 발행하며 구독자는 값이 발행될 경우 발행된 데이터를 처리한다. 구독자는 subscribe 메서드를 통해 붙일 수 있다.
publisher.subscribe { it ->
println(it)
}
이제 publisher에서 다음과 같은 값을 발행하도록 한다.
publisher.onNext("count : 1")
publisher.onNext("count : 2")
publisher.onNext("count : 3")
즉, 데이터가 발행되는 발행자에 구독자를 붙여놓으면 해당 발행자에 새로운 데이터가 발행되었을 경우 구독자가 해당 데이터를 처리한다.
그러면 반응형 프로그래밍의 의의가 뭘까?
반응형 프로그래밍의 의의
반응형 프로그램은 UI가 있는 프로그램에서 진가를 발휘한다.
기존 명령형 프로그래밍을 이용할 경우 사용자의 동작에 대해 일일히 컴퓨터가 어떤 동작을 해야 하는지 알려주어야 했다.
예를 들어 같은 역할을 하는 사용자 동작이 여러 곳에서 발생할 수 있을 경우 각각에 listener를 붙이고 listener 마다 동작에
대한 처리를 해주어야 했다.
button1.setOnClickListener {
doSomething()
}
button2.setOnClickListener {
doSomething()
}
button3.setOnClickListener {
doSomething()
}
button 이 클릭될 때마다 doSomething() 동작이 일어나야 할 때 위와 같이 처리해야 한다.
하지만!!!
반응형 프로그래밍에서는 사용자의 동작 이벤트에 대해 발행자로 데이터를 발행하도록 시키면, 해당 발행자에 대한 구독자의 동작만 신경쓰면 되기 때문에 관리 포인트가 줄어들게 된다.
button1.setOnClickListener {
publisher.onNext(BUTTON_CLICK_EVENT)
}
button2.setOnClickListener {
publisher.onNext(BUTTON_CLICK_EVENT)
}
button3.setOnClickListener {
publisher.onNext(BUTTON_CLICK_EVENT)
}
publisher.subscribe {
if(it == BUTTON_CLICK_EVENT)
doSomething()
}
publisher는 클릭 이벤트에 대한 발행자이고 해당 발행자에게 이벤트가 일어났을 때 어떤 동작을 할지만 설정해 놓으면
데이터가 발행되는대로 해당 동작이 수행되게 된다.