[RxJava] 2. Reactive ๊ธฐ๋ณธ ์ฐ์ฐ์(Operator) - map, filter, reduce
Reactive Programming์์ ๊ฝ์ด๋ผ๊ณ ํ ์ ์๋ Reactive Operator์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ง์ฝ ์ฌ๋ฌ๋ถ๋ค์ด Java 8์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, ์ด๋ฌํ Reactive ์ฐ์ฐ์๊ฐ ๋งค์ฐ ์ต์ํ์ค ์๋ ์์ต๋๋ค.
RxJava์์๋ Reactive Programming์ ๋ง์ถฐ, ์ด๋ฌํ Reactive Operator๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๋ฌ๋ถ๋ค์ด ์์ ์ผํ ๊ฒ์ ์ด๋ฐ Reactive ์ฐ์ฐ์๊ฐ ๋จ์ฐ RxJava, Java 8์์์ ๊ฐ์ด "Java"์์๋ง ๋ณผ ์ ์๋ ๊ฒ์ ์๋๋๋ค. Python์์๋ Javascript์์๋ Reactive Programming๋ง ์ง์ํ๋ค๋ฉด ์ด๋ฌํ ์ฐ์ฐ์๋ ์ด๋์๋ ๋ณผ ์ ์์ต๋๋ค.
์ด๋ฒ ๊ธ์์๋ RxJava์์ Reative Operator๊ฐ ์ด๋ค์์ผ๋ก ์กด์ฌํ๋์ง ์์๋ณผ ๊ฒ์ ๋๋ค. ๊ทธ ์ ์ Reactive ์ฐ์ฐ์๋ฅผ ์ ๋๋ก ๊ณต๋ถํ๊ณ ์ง์ด๋ณด๋๋ก ํ์ฃ .
Reactive Operator
์์ ๋งํ๋ฏ์ด Reactive Operator๋ ๋จ์ฐ Java์์๋ง ์กด์ฌํ๋ ๊ฒ์ด ์๋๋ผ .NET, Scala, Swift ๋ฑ Reactive Programming์ ์ง์ํ๋ ์ธ์ด๋ผ๋ฉด ์ด๋์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฒ์ RxJava๋ฅผ ํตํด์ ์ด๋ฌํ Reactive ์ฐ์ฐ์๋ฅผ ์๋ฌํ๋ค๋ฉด ๋ค๋ฅธ ์ธ์ด์์๋ ์ฝ๊ฒ ์ด์ฉํ ์ ์์ต๋๋ค.
๊ฐ๋จํ๊ฒ ํน์ง์ ์ ๋ฆฌํด๋ดค์ต๋๋ค.
- ๋ค์ํ ์ฐ์ฐ ํจ์์ ์กด์ฌ
-> map, filter, reduce ๋ฑ 400๊ฐ ์ด์์ ์ฐ์ฐ ํจ์๊ฐ ์กด์ฌํ๋๋ฐ, ๋๋ถ๋ถ map, filter, reduce์์ ํ์๋ ๊ฒ๋ค์ ๋๋ค. - ์ธ์ด์ ํน์ฑ๊ณผ๋ ๋ฌด๊ด
-> ๋๋ถ๋ถ์ Reactive Programming์ ์ง์ํ๋ ์ธ์ด์์ ์ด๋ฌํ ํจ์ ์ด๋ฆ์ ๊ทธ๋๋ก ์ฌ์ฉ.
๊ทธ๋ ๋ค๋ฉด Reactive Operator์๋ ์ด๋ ํ ๊ฒ๋ค์ด ์์๊น์?
์ฐ์ฐ์ ์ข ๋ฅ | ์ ์ | ์์ |
---|---|---|
์์ฑ(Creating) ์ฐ์ฐ์ | Observable, Single ํด๋์ค ๋ฑ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ์ ํ๋ฆ์ ๋ง๋ค์ด๋ด๋ ํจ์ | create(), just(), fromArray(), interval(), range(), timer() ๋ฑ |
๋ณํ (Transforming) ์ฐ์ฐ์ | ์ ๋ ฅ์ ๋ฐ์์ ์ํ๋ ์ถ๋ ฅ์ ๋ด๋ ์ ํต์ ์ธ ์๋ฏธ์ ํจ์ | map(), flatmap() ๋ฑ |
ํํฐ(Filter) ์ฐ์ฐ์ | ์ ๋ ฅ ๋ฐ์ดํฐ ์ค ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณจ๋ผ๋ด๋ ํจ์ | filter(), first(), take() ๋ฑ |
๊ฒฐํฉ(Combining) ์ฐ์ฐ์ | ๋ ๊ฐ ์ด์์ ์ ๋ ฅ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๋ฐ์ดํฐ๋ก ํตํฉํ๋ ์ฐ์ฐ์ | zip(), combineLatest(), Merge(), concat() |
์ค๋ฅ์ฒ๋ฆฌ(Error Handling) ์ฐ์ฐ์ | ์ฐ์ฐ์ ๋ด์์ ์์ธ ์ฒ๋ฆฌ ๊ตฌํ์ ์ํ ํจ์ | onErrorReturn(), onErrorResumeNext(), retry() ๋ฑ |
์กฐ๊ฑด(Conditional) ์ฐ์ฐ์ | Observable์ ํ๋ฆ์ ์ ์ดํ๋ ์ญํ | amb(), takeUntil(), skipUntil(), all() ๋ฑ |
์ํ๊ณผ ์งํฉํ ์ฐ์ฐ์ | ์ํ ํจ์์ ์ฐ๊ด์๋ ์ฐ์ฐ์ | sum() ๋ฑ |
๊ธฐํ (Other) ์ฐ์ฐ์ | ๊ตฌ๋ , ๋ฐํ ๋ฑ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐ ๋ฐ์ดํฐ์ ์ซ์๋ฅผ ์ธ๋ ํน์ง๋ณ ์ฐ์ฐ์ | subscribeOn(), observeOn(), count() ๋ฑ |
์ด๋ ๋ฏ RxJava์์ ์ ๊ณตํ๋ ์๋ง์ ์ฐ์ฐ์๋ค์ด ์กด์ฌํฉ๋๋ค๋ง ์ด๋ฅผ ์กฐ๊ธ ๊ฐ์ถ๋ ค์ ์ด๋ ๊ฒ ์ ๋ฆฌํด ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก๋ map, filter, reduce์์ ๋๋ถ๋ถ ํ์๋ ์ฐ์ฐ์๋ค์ด๋ฉฐ ์ด๋ค์ ์ฐ์ฐ์๋ค์ ๋ค์ ํฌ์คํธ์์ ์ถํ ์์ธํ๊ฒ ๋ค๋ฃจ๊ณ , ์ด๋ฒ ํฌ์คํธ์์๋ ๊ธฐ๋ณธ ์ฐ์ฐ์์ธ map, filter, reduce์ ๋ํด์ ์ค์ ์ ์ผ๋ก ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
map
map์ ์ ๋ ฅ๋ ๋ฐ์ดํฐ์ ์ฌ๋ฌ๋ถ๋ค์ด ์ ์ํ ํจ์๋ฅผ ๋ฃ์ด ์ํ๋ ๋ฐ์ดํฐ๋ก ๋ณํํ๋ ํจ์์ ๋๋ค. ๊ฐ๋ น Java์ Collections๋ฅผ ์๋ก ๋ค๋ฉด ์ด๋ฐ์์ผ๋ก ๋ํ๋ผ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ Point๋ผ๋ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ์ด๋ฅผ ArrayList์ ์ ์ฅํ์ต๋๋ค. Java 8์์๋ Stream ํด๋์ค์์ Reactive ์ฐ์ฐ์๋ฅผ ์ ๊ณตํ์ฌ ์ฌ๊ธฐ์ map์ ์ฌ์ฉํ ์ ์์ฃ .
RxJava์์๋ Observable ํด๋์ค๋ฅผ ํ ๊ฐ ๋ง๋ค๊ณ , ์ด๋ฅผ ์ฌ์ฉํด ๋ณผ ์ ์์ต๋๋ค.
์ธ๋ถ์์ ๋ฐ์ดํฐ๊ฐ ๊ณ์ ๋ค์ด์จ๋ค๋ ๊ฐ์ ํ์ Observable ํด๋์ค๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์์ ๊ฐ์ด ํ ๊ฐ์ ํฌ์ธํธ๋ง ์ฃผ์ด์ง ๋๋ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Point๊ฐ ํ ๊ฐ๊ฐ ์๋ ๋ฆฌ์คํธ ํต์งธ๋ก ๊ฐ์ ธ์ค๊ฒ ๋๋ค๋ฉด ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ง ์๊ณ , fromIterable ํจ์๋ฅผ ์ด์ฉํด์ ์ฝ๋๋ฅผ ์ค์ผ ์๋ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด ์ฐ์ฐ์๋ ์ด๋ค์์ผ๋ก ๋์ํ๋ ๊ฒ์ผ๊น์?
์ฐ๋ฆฌ๋ ์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด RxJava ๋ฌธ์์์ ์ ๊ณตํ๋ ๊ทธ๋ฆผ์ ํ ๋ฒ ์ฐธ๊ณ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฆผ์์ ๋ณด๋ฉด ๋๊ทธ๋ผ๋ฏธ๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ Point ๊ฐ์ฒด์ ์๋ณธ ๋ฐ์ดํฐ์ ๋๋ค. ์ด๋ฅผ map ํจ์๋ฅผ ์ด์ฉํด์ ์ํ๋ ์ฐ์ฐ ํจ์๋ฅผ ๋ฃ๊ณ , ๋ง๋ฆ๋ชจ ํํ๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ฒ์ด์ฃ .
ํต์ฌ์ ๋ด๊ฐ ์ํ๋ ํจ์๋ฅผ ๋ฆฌ์คํธ์ ์๋ ๋ฐ์ดํฐ์ ๋ฃ๊ณ , ์ด๋ฅผ "์ฌ๊ฐ๊ณต"ํ๋ค๋ ๊ฒ์ ๋๋ค.
- .map(point -> point.toString());
-> map ์ํ : public final <R> Observable<R> map(Function<? super T, ? extends R> maper) - ๋ด๊ฐ ์ํ๋ ํํ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํจ์๋ฅผ ์ ์ํ ์ ์์.
map ์ํ์ ์์ธํ ๋ณด๋ฉด, ์ด๋ค ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๊ฒ ๋ฉ๋๋ค. Function์ ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์ ์ํ๋ ํจ์๋ฅผ Lambda ์์ผ๋ก ์ ์ํ ์ ์๋ค๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
flatMap
๊ทธ๋ ๋ค๋ฉด ์ด์ ๋น์ทํ๊ฒ ์๊ธด flatMap์ ๋ฌด์์ผ๊น์? ๊ฐ์ map์ธ๋ฐ ์ flatMap์ด๋ผ๋ ๊ฒ์ด ์กด์ฌํ ๊น์?
flatMap์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋์ Observable๋ก ๋์จ๋ค๋ ๊ฒ์ด map๊ณผ ๋ค๋ฅธ์ ์ ๋๋ค. map ํจ์๋ 1:1 ๋ฐ์ดํฐ ์ฐ์ฐ ํจ์๋ผ๋ฉด flatMap์ 1:N, 1:1 Observable ํจ์์ ๋๋ค.
๋ํ map์ ๋๊ธฐ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ๋น๋๊ธฐ์ ๊ฐ์ด ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ทธ ํจ๊ณผ๋ฅผ ๋ณด๊ธฐ ์ด๋ ค์ฐ๋ฉฐ ๋น๋๊ธฐ ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ map์ด ์๋ flatMap์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๊ทธ๋ฆผ์ ๋จผ์ ๋ณด๋ฉด, ์ญ์ ๋๊ทธ๋ผ๋ฏธ๊ฐ ์๋ณธ ๋ฐ์ดํฐ์ด๊ณ ๋ง๋ฆ๋ชจ๊ฐ ๋ณํ๋ ๊ฒฐ๊ณผ์ ๋ฐ์ดํฐ๋ผ๊ณ ํ์ ๋ ํ Object ๋ฐ์ดํฐ๊ฐ ์๋ ์ฌ๋ฌ Object์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ ๋ ์ข ๋ ํจ์จ์ ์ธ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค๋ฉด 2์ฐจ์ ๋ฐฐ์ด, Map์ ์ฌ์ฉํ์ ๋ ํจ์จ์ ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. ์๋ก ๊ฐ๊ธฐ ๋ค๋ฅธ ์ข ๋ฅ์ Object๋ก ๋์ด ์๊ณ , ์ด ๋ ๊ฐ๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ๋ ค๋ฉด map์ ์ฌ์ฉํ์ ๋๋ ์๋ก๊ฐ ๋ค๋ฅธ ๋ ๋ฐ์ดํฐ์ ๋ํด map์ ํ ๋ฒ์ฉ ์จ์ค์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ flatMap์ ์ฌ์ฉํ๋ค๋ฉด ์๋ก ๊ฐ๊ธฐ ๋ค๋ฅธ Object๋ผ ํ ์ง๋ผ๋ ์ด๋ฅผ flatMap ํ ๋ฒ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ์ด์ฃ .
RxJava์์ Observable ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ง์ฝ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ผ ํ๋ค๋ฉด flatMap์ ์ฌ์ฉํด์ผ ํ๊ณ , ์ฌ๊ธฐ์ ๋ฐฐ์์ ๊ณ ๋ คํ๋ค๋ฉด Flowable๊น์ง ์ฌ์ฉํ๋ฉด ์ข๊ฒ ๊ตฐ์.
์ ๋ฆฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- map: 1๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ๊ฐ์ด๋ ํ์ ์ผ๋ก ๋ณํ.
- flatMap: 1๊ฐ์ ๊ฐ์ ๋ฐ์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ(Observable)๋ก ํ์ฅ
filter
๋ฐ์ดํฐ๋ค ์ค์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ ๋ฅผ ์ ์๋ filter ํจ์๋ Predicate๋ฅผ ์ธ์๋ก ๋ฃ์ด ์ํ๋ ๋ฐ์ดํฐ๋ง ๋์ง์ด๋ด๋ ํจ์์ ๋๋ค.
0, 0์์ 2, 2๊น์ง์ ์ขํ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ฌ๊ฐํ์์ ์ค๋ฅธ์ชฝ ์ขํ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ค๊ณ ์ถ์ ๋ ์์ ๊ฐ์ด Point์์ y ๊ฐ์ด 2์ธ ๊ฐ๋ง ๊ฐ์ ธ์ค๊ฒ๋ filter ์์ ํจ์๋ฅผ ์ ์ํ์ฌ ์ํ๋ ๋ฐ์ดํฐ๋ง ๋์ง์ด ๋ผ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ filter๋ Function ์ธํฐํ์ด์ค๊ฐ ์๋๋ผ Predicate ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ด๊ฐ ์ ์ํ ์ฝ๋๊ฐ ํจ์์ธ์ง Predicate์ธ์ง๋ฅผ ์ข ๋ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ ์ฝ๋์ฒ๋ผ Lambda๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ํ๋์ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค.
- first() : Observable์ ์ฒซ ๋ฒ์งธ ๊ฐ ๋ฐํ
- last() : Observable์ ๋ง์ง๋ง ๊ฐ ๋ฐํ
- take(N) : ์ฒ์๋ถํฐ N๊ฐ๊น์ง์ ๊ฐ ๋ฐํ
- takeLast(N) : ๋ง์ง๋ง์์๋ถํฐ N๊ฐ ๊น์ง์ ๊ฐ ๋ฐํ
- skip(N) : ์ฒ์๋ถํฐ N๊ฐ๊น์ง์ ๊ฐ์ ๊ฑด๋๋ฐ๊ณ ๊ทธ ๋ค์ ๊ฐ๋ถํฐ ๋ฐํ
- skipLast(N) : ๋ง์ง๋ง N๊ฐ๊น์ง์ ๊ฐ์ ๊ฑด๋๋ฐ๊ณ ๊ทธ ์ด์ ๊ฐ๋ถํฐ ๋ฐํ
filter๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ด๋ฏธ RxJava์์ ์ ์๋ ํํฐ๋ง์ด ๋ช ๊ฐ ์๋๋ฐ, ์ด๋ฅผ ์ฌ์ฉํด์๋ ํํฐ๋ง ํ ์ ์์ต๋๋ค.
ํํฐ๋ง ํจ์๋ ์ฌ๋ฌ ๊ฐ์ง์ ๋ฐ์ดํฐ ์ค ์ํ๋ ๋๊ทธ๋ผ๋ฏธ ๋ฐ์ดํฐ๋ง ๋ฝ์๋ธ๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
reduce
๋ง์ง๋ง์ผ๋ก reduce ์ฐ์ฐ์๋ ๋ ๊ฐ ์ด์์ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๋ฐ์ดํฐ๋ก ์ทจํฉํ๋ ์ฐ์ฐ ํจ์์ ๋๋ค. ๊ฐ๋ น ์๋ฅผ ๋ค์ด ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ทจํฉํ์ฌ ๋ฆฌ์คํธ๋ก ๋ง๋ค๊ณ , ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐ๊ฑด ์ทจํฉํด์ ํ๋์ ๋ฐ์ดํฐ๋ก ํฉ์ณ์ค ๋ reduce๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
RxJava์์ reduce๋ฅผ ์ฌ์ฉํ๋ฉด Observable์ด ์๋ Maybe ํด๋์ค๋ก ๋ฐํํ๊ฒ ๋ฉ๋๋ค. ๊ทธ ์ด์ ๋ reduce ์์ชฝ ๋๋ค ํจ์ ๊ตฌํ์ ๊ฒฐ๊ณผ ๊ฐ์ด ๋ฐํ๋์ง ์์ ์๋ ์๊ธฐ ๋๋ฌธ์ Nullable๊ณผ ํธํ๋๋ Maybe ํด๋์ค๋ก ๋ฐํ๋ฉ๋๋ค.
ArrayList๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ ํฌ์ธํธ์ ํฉ์ reduce๋ฅผ ์ด์ฉํด์ ๊ตฌํ ์ฝ๋์ ๋๋ค. reduce๋ map, filter์ ๋ค๋ฅด๊ฒ ํจ์์ ์ธ์๋ฅผ ์ต๋ 2๊ฐ๊น์ง ์ค์ ํ ์ ์์ผ๋ฉฐ ์ด๋ฅผ ์ด์ฉํด์ ํ๋์ ๊ฒฐ๊ณผ๋ก ์ทจํฉํฉ๋๋ค. ๋จ, ์ด ๋ ๊ฒฐ๊ณผ๋ ์๋ณธ ๋ฐ์ดํฐ์ ํ์ ๊ณผ ๋๊ฐ์ ํ์ ์ผ๋ก ๋ฐํ๋์ด์ผ ํฉ๋๋ค.
- reduce(BitFunction<T, T, T> reducer)
-> reduce๋ Function์ด ์๋ BitFunction ์ธํฐํ์ด์ค๋ฅผ ์ธ์๋ก ํ์ฉ (์ ๋ ฅ ์ธ์๊ฐ ์ต๋ 2๊ฐ๊น์ง ์ ์ฉ) - Observable์ด ์๋ Maybe๋ก ์ํ ๋ฐํ
๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด ์์ ๊ฐ์ด ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ํฉ์น๊ณ ํฉ์น๊ณ ๋ ํฉ์ณ์ ๋ง์ง๋ง์ผ๋ก๋ ์ต์ข ํ๋์ ๋ฐ์ดํฐ๋ก ์ทจํฉํ๋ ํํ๊ฐ ๋ง๋ค์ด์ง๋ ๊ฒ์ด reduce์ ๋๋ค.
๋ง์น๋ฉฐ...
Reactive Programming์ ๊ธฐ๋ณธ์ด๋ผ๊ณ ํ ์ ์๋ map, filter, reduce์ ๋ํด ์์๋ดค์ต๋๋ค. RxJava์์๋ ์ด๋ฅผ ๋ฐํ์ผ๋ก ํ์ฌ ์ ๋ฐฑ๊ฐ์ ์ฐ์ฐ์๊ฐ ์กด์ฌํ๋๋ฐ, ์ฐ๋ฆฌ๋ ์ด ์ค์์ ๊ธฐ๋ณธ์ ์ธ ์ฐ์ฐ์๋ง์ ๋ค๋ฃฌ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฐ ๊ธฐ๋ณธ ์ฐ์ฐ์๋ง ๋ค๋ฃฐ ์ค ์์๋ ์ด๋ ์ ๋ Reactive Programming์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ค์ ํฌ์คํธ์์๋ RxJava๊ฐ ๊ฐ์ง ์ฐ์ฐ์ ์ค ์์ฃผ ์ฌ์ฉํ๋ ์ฐ์ฐ์์ ๋ํด ๋ค๋ค๋ณผ ๊ฒ์ด์ง๋ง ๋ชจ๋ ์ฐ์ฐ์๋ฅผ ๋ค ์ธ์์ ์จ์ผ ํ ํ์๋ ์์ต๋๋ค.
์์์ ์ ๊น ๋ค๋ฅธ ์ธ์ด์ Reactive Programming์ ๋ํด์๋ ์ด์ผ๊ธฐ ํ์๋๋ฐ, Rx์ ์์ด๋ ์ด์ ํฌ์คํธ์์๋ ์๊ธฐํ๋ ๊ฒ์ฒ๋ผ .NET Core๊ฐ ๊ทธ ์์ด์ด๋ฉฐ ํด๋น ์์ง๋์ด๊ฐ Netflix๋ก ์ด์งํ๋ฉด์ Java์ ๋ํ Rx๋ฅผ ๋ง๋ค๊ณ ๋์ RxJava๊ฐ ์์ํ๋ค๋ ๊ฒ์ผ๋ก ์ ๋๋ฉ๋๋ค. ๋ฐ๋ผ์ ํ์ฌ๋ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ด Rx๋ฅผ ์ ๊ณตํ๊ณ ์๊ณ , ๊ทธ ์ค์์๋ Java, Kotlin, Scala, Python์ด ์ ๊ฐ ์๊ณ ์๋ Reactive ์ฐ์ฐ์๋ฅผ ์ ๊ณตํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์๊ณ ์์ต๋๋ค.
์ด๋ฌํ ์ฐ์ฐ์๋ Java 8์์๋ ๊ธฐ๋ณธ ์ ๊ณต๋๋ฉฐ Java 8์์๋ Stream ํด๋์ค ํ์ ๋ฉ์๋๋ก ์ ๊ณต๋๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ํด๋์ค, ์ปฌ๋ ์ ์ ์ด๋ฌํ ์ฐ์ฐ์๋ก ์ฌ์ฉํ๊ณ ์ ํ ๊ฒฝ์ฐ, Stream ํด๋์ค๋ก ๋ณํํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ง๋ง Stream ํด๋์ค๋ Observable๊ณผ๋ ๋ฌ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๊ด์ฐฐํ๋ ์ญํ ์ ์ํํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ง์ฝ ๋ฐ์ดํฐ๋ฅผ ๊ด์ฐฐํ๋ฉด์ Reactive Programming์ ์์๊น์ง ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด ๊ทธ ๋๋ถํฐ RxJava๋ฅผ ์ด์ฉํด๋ณด๋ ๊ฒ์ ๊ถํฉ๋๋ค
์ฐธ๊ณ (์ด๋ฏธ์ง): reactivex.io/documentation
'Programming > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[RxJava] 4. Reactive ์ฐ์ฐ์ ํํค์ณ๋ณด๊ธฐ 2ํธ (๊ฒฐํฉ, ์กฐ๊ฑด ์ฐ์ฐ์) (0) | 2021.02.21 |
---|---|
[RxJava] 3. Reactive ์ฐ์ฐ์ ํํค์ณ๋ณด๊ธฐ 1ํธ (์์ฑ, ๋ณํ ์ฐ์ฐ์) (0) | 2021.02.07 |
[RxJava] 1. RxJava์ ๊ธฐ๋ณธ - Observable (0) | 2021.01.10 |
[RxJava] RxJava๋ก ์์ํ๋ Java Reactive ํ๋ก๊ทธ๋๋ฐ (5) | 2021.01.09 |
[Java] - Java Stream API (0) | 2020.01.11 |