[RxJava] 5. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 3ํŽธ (์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž ๋ฐ ๊ธฐํƒ€ ์—ฐ์‚ฐ์ž)

๋ฐ˜์‘ํ˜•

 

2021/02/21 - [Programming/Java] - [RxJava] 4. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 2ํŽธ (๊ฒฐํ•ฉ, ์กฐ๊ฑด ์—ฐ์‚ฐ์ž)

 

[RxJava] 4. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 2ํŽธ (๊ฒฐํ•ฉ, ์กฐ๊ฑด ์—ฐ์‚ฐ์ž)

2021/02/07 - [Programming/Java] - [RxJava] 3. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 1ํŽธ (์ƒ์„ฑ, ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž) [RxJava] 3. Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ 1ํŽธ (์ƒ์„ฑ, ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ž) 2021/01/23 - [Programming/Java] - [RxJ..

blog.neonkid.xyz

์ง€๋‚œ ํฌ์ŠคํŠธ์— ์ด์–ด์„œ RxJava์˜ ๊ธฐ๋ณธ์„ ๋‹ค๋ฃจ๋Š” ์—ฐ์‚ฐ์ž ๋งˆ์ง€๋ง‰ ํŽธ ์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž ๋ฐ ๊ธฐํƒ€ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” Sum, Average ์™€ ๊ฐ™์€ ์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž๋“ค์„ ์ด์•ผ๊ธฐํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์ข€ ๋” Reactive ํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์ž๋กœ ์ œ๊ณตํ•˜๋ฉฐ ๊ทธ ์™ธ ๊ธฐํƒ€ ์—ฐ์‚ฐ์ž๋กœ๋Š” ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ๋„ ๊ฐ•์กฐํ–ˆ๋˜ ๋ฐฐ์•• ์ด์Šˆ์™€ ๊ด€๋ จ๋œ ์—ฐ์‚ฐ์ž ๋“ฑ ํŠน์ˆ˜ํ•˜๊ฒŒ ๋‹ค๋ฃจ๋Š” ์—ฐ์‚ฐ์ž๋“ค์„ ์ด์•ผ๊ธฐ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž

์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ˆซ์žํ˜• ๋ฐ์ดํ„ฐ๋กœ ์ด๋ฃจ์–ด์ง„ Array ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ํ•ฉ, ํ‰๊ท  ๋“ฑ์˜ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ํ•˜๋‚˜์˜ Observable ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.

 

๋ณธ๋ž˜ RxJava์—์„œ ์ˆ˜ํ•™์—ฐ์‚ฐ์ž๋Š” 1.0์—์„œ ์ง€์›ํ–ˆ๋˜ ๋””ํŽœ๋˜์‹œ์˜€์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ RxJava 1.x์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋˜ RxJava์˜ ๋””ํŽœ๋˜์‹œ๋งŒ์œผ๋กœ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Math ๊ด€๋ จ๋œ ์—ฐ์‚ฐ์ž๋Š” ๋ณ„๋„์˜ ๋‹ค๋ฅธ ๋””ํŽœ๋˜์‹œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

implementation "io.reactivex.rxjava-math:1.0.0"

๋ณธ๋ž˜ RxJava 1.x์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋””ํŽœ๋˜์‹œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ ๋ฐ”๋กœ ์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ RxJava 2.x ๋ฒ„์ „๋ถ€ํ„ฐ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ๊ฐ€ ๋ถ„๋ฆฌ๋˜๋ฉด์„œ ์ˆ˜ํ•™ ๊ด€๋ จ๋œ ์—ฐ์‚ฐ์ž๋Š” ๋ณ„๋„์˜ ๋””ํŽœ๋˜์‹œ๋ฅผ ์„ค์น˜ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

 

์ด๋Ÿฌํ•œ ๋””ํŽœ๋˜์‹œ๋Š” RxJava Companion ์—ฐ์‚ฐ์ž๋กœ ๋ถˆ๋ฆฌ์›Œ RxJava 2.x ์ด์ƒ์—์„œ๋Š” ํ˜ธํ™˜๋˜์ง€ ์•Š๊ณ , ๊ณต์‹์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜์—ฌ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

RxJava 2.x ์ด์ƒ ๋ฒ„์ „์—์„œ ์ด๋Ÿฌํ•œ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ด๋ฅผ ๋ณ„๋„๋กœ ํฌํŒ…์„ ํ•ด์ฃผ์‹  RxJava 2์˜ ํ•ต์‹ฌ ๊ธฐ์—ฌ์ž์ด์‹  David Karnok์ด ์ด๋Ÿฌํ•œ Extension์„ ๊ณต๊ฐœํ•˜์—ฌ ํ˜„์žฌ Maven์—์„œ ์ œ๊ณต๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

implementation "com.github.akarnokd:rxjava3-extensions:3.0.1"

 

 

 

sum()

 

์•ž์„œ ๋งํ•œ ๋“ฏ์ด ๋Œ€ํ‘œ์ ์œผ๋กœ๋Š” sum์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ˆซ์žํ˜•์œผ๋กœ ์ด๋ฃจ์–ด์ง„ Array, List (ํ•˜๋‚˜์˜ Observable ํ˜น์€ Flowable) ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ํ•ฉ๊ณ„๋ฅผ ํ•˜๋‚˜์˜ Observable๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. 

 

์œ„ ๋ฌธ์„œ๋Š” RxJava 1.x์—์„œ ์ œ๊ณต๋˜์—ˆ๋˜ ๋ฌธ์„œ๋ฅผ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด๋ฉฐ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด X Observable์ด ์žˆ๊ณ , ํ•ด๋‹น ๊ฐ์ฒด์—์„œ Iterable ํ˜•ํƒœ์˜ ๋ ˆํผ๋Ÿฐ์Šค ์ธ์Šคํ„ด์Šค์—์„œ ์ž๋ฃŒ๋ฅผ ๋นผ์™€ ํ•ฉ๊ณ„๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ๋‚˜ํƒ€๋‚ด์ฃผ๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐ ์ž๋ฃŒํ˜•๋ณ„๋กœ sumInteger, sumLong, sumFloat๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

// RxJava 1.x
MathObservable.sumInteger(Observable.range(1, 4)).subscribe(System.out::println);

// RxJava 2.x or 3.x
Observable.range(1, 4).to(MathObservable::sumInt).subscribe(System.out::println);

๊ณต์‹์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ Extension์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์— ์‚ฌ์šฉ๋ฒ•์ด ์•ฝ๊ฐ„ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๋ฐ, ์ผ๋‹จ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์ด RxJava Extension์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ sumInt๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

 

average()

 

average ์—ญ์‹œ sum๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ average์˜ ๊ฒฝ์šฐ ์ •์ˆ˜๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜๋„ ์žˆ๊ณ , ์†Œ์ˆซ์  ๊ฐ’์ด ๋‚˜์˜ฌ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— averageFloat์™€ averageDouble ๋ฉ”์†Œ๋“œ๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

// RxJava 1.x
MathObservable.averageFloat(new Integer[]{30, 60, 25, 18, 41}).subscribe(System.out::println);

// RxJava 2.x or 3.x
Observable.fromArray(new Integer[]{30, 60, 25, 18, 41}).to(MathObservable::averageFloat)
                .subscribe(System.out::println);

average์˜ ๊ฒฝ์šฐ๋Š” ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์˜ ๋ณ€ํ™”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ sum๋„ ๊ทธ๋ ‡๊ณ  average๊ณ  ๊ทธ๋ ‡๊ณ  ์ฝ”๋“œ ์‚ฌ์šฉ์— ์กฐ๊ธˆ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”๋ฐ์š”. 1.x์˜ ๊ฒฝ์šฐ๋Š” MathObservable์ด๋ผ๋Š” ๋ณ„๋„์˜ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๊ณ , Extension์€ ์ด๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค.

 

์‚ฌ์‹ค ์ฝ”๋“œ๋ฅผ ์—ด์–ด๋ณด๋ฉด 1.x์—์„œ๋Š” Observable์„ Base๋กœ ํ•˜์—ฌ๊ธˆ MathObservable ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•œ ๊ฒƒ์ด๊ณ , 2.x์—์„œ ์ œ๊ณตํ•˜๋Š” Extension์˜ ๊ฒฝ์šฐ ์–ด์ฐจํ”ผ Base๊ฐ€ Observable์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ๊ทธ๊ฒƒ์„ ํด๋ž˜์Šค์— ์ •์˜ํ•  ํ•„์š” ์—†์ด ์ด์™€ ๊ด€๋ จ๋œ ๋ฉ”์†Œ๋“œ๋ฅผ static์œผ๋กœ ์ œ๊ณตํ•จ์œผ๋กœ์จ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ Extension๊ณผ ๊ธฐ์กด ์ฝ”๋“œ์˜ ์ฐจ์ด๋Š” ๊ฑฐ์˜ ์—†์œผ๋ฉฐ ๋‹จ์ง€ ์ฝ”๋“œ์˜ ๋ชจ์Šต์„ ๋‹จ์ˆœํ™” ํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌํŒฉํ† ๋ง ํ•œ ๊ฒƒ ๋ฟ์ด๋ผ๊ณ ๋งŒ ๋ณด๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

min()

 

min ์—ญ์‹œ ๊ฐ™์€ ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋กœ ์ตœ์†Ÿ๊ฐ’์„ ํ•˜๋‚˜์˜ Observable๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค.

 

// RxJava 1.x
MathObservable.min(new Integer[]{30, 60, 25, 18, 41}).subscribe(System.out::println);

// RxJava 2.x or RxJava 3.x
Observable.fromArray(new Integer[]{30, 60, 25, 18, 41}).to(MathObservable::min)
                .subscribe(System.out::println);

์œ„ ์‚ฌ์šฉ๋ฒ• ๊ทธ๋Œ€๋กœ max ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

max()

 

max๋Š” ๋ฐ์ดํ„ฐ ๋ชจ์Œ์—์„œ ์ตœ๋Œ“๊ฐ’์„ ํ•˜๋‚˜์˜ Observable๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค.

 

// RxJava 1.x
MathObservable.max(new Integer[]{30, 60, 25, 18, 41}).subscribe(System.out::println);

// RxJava 2.x or RxJava 3.x
Observable.fromArray(new Integer[]{30, 60, 25, 18, 41}).to(MathObservable::max)
                .subscribe(System.out::println);

๊ทธ๋Ÿฐ๋ฐ, ํ•œ ๊ฐ€์ง€ ์˜๋ฌธ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 1.x์—์„œ๋Š” MathObservable์„ ๋ณ„๋„๋กœ ์ด์šฉํ•˜๊ณ , Extension์—์„œ๋Š” ๊ธฐ์กด ๊ตฌํ˜„์ฒด์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ๋˜์–ด ์žˆ๋Š”๋ฐ, ์ด๊ฒŒ ๊ฐ€๋Šฅํ•œ ๊ฒŒ to ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ˆˆ์— ๋„๋Š”๋ฐ์š”. to ๋ฉ”์†Œ๋“œ๋Š” ๋ฌด์—‡์ธ๊ฑธ๊นŒ์š”?

 

to ๋ฉ”์†Œ๋“œ๋Š” RxJava์—์„œ ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ๋ฐ์ดํ„ฐ๋“ค ๋ชจ์Œ์—์„œ ํ•˜๋‚˜์˜ Observable๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Observable<List<Integer>> -> Obserable<Integer> ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋น„์Šทํ•œ ๋ฉ”์†Œ๋“œ๋กœ toFlowable ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Flowable์€ RxJava์—์„œ ๋ฐฐ์•• ์ด์Šˆ๋ฅผ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค์ธ๋ฐ์š”. Observable๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ๊ฐ์ฒด๋ฅผ Flowable๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. 

// RxJava 2.x or 3.x
Observable.fromArray(new Integer[]{30, 60, 25, 18, 41}).toFlowable(BackpressureStrategy.BUFFER)
                .to(MathFlowable::min).subscribe(System.out::println);

Flowable๋กœ ๋ณ€ํ˜•ํ•  ๋•Œ ์ฃผ๋Š” ์ธ์ž๋Š” ๋ฐ”๋กœ ๋ฐฐ์•• ์ „๋žต์ธ๋ฐ์š”. ๋ฐฐ์•• ์ „๋žต์— ๋”ฐ๋ผ์„œ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋Ÿ‰์„ ์ƒ์‚ฐํ•˜๊ณ  ์†Œ๋น„ํ•  ๋•Œ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๋‹ค๋ฅธ ํฌ์ŠคํŠธ์—์„œ ์ƒ์„ธํžˆ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

count()

 

RxJava์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž ์ค‘ ์œ ์ผํ•˜๊ฒŒ Extension์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ์—ฐ์‚ฐ์ž์ธ count๋Š” ์–ด๋Š ๋ฒ„์ „์ด๋“ ์ง€ Observable ๊ฐ์ฒด์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.

 

Observable.range(1, 4).count().subscribe(System.out::println);

Extension์— ์˜์กดํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๋ฒ„์ „์—์„œ ์œ„์™€ ๊ฐ™์€ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒ์‚ฐํ•ด์„œ ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋“ค์— ๋Œ€ํ•œ ๊ฐฏ์ˆ˜๋ฅผ ํ†ต๊ณ„ํ•˜๊ณ ์ž ํ•  ๋–„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

๊ธฐํƒ€ ์—ฐ์‚ฐ์ž

๊ทธ ์™ธ ์—ฐ์‚ฐ์ž๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ์ง€์—ฐ๊ณผ ๊ด€๋ จ๋œ ์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ ์ž ๊น ๋‹ค๋ค˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์‚ฐํ•˜๊ณ  ์†Œ๋น„ํ•˜๋Š” ๊ณผ์ •์—์„œ sleep๊ณผ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•˜๋Š” delay, timeInterval ํ•จ์ˆ˜ ๋“ฑ์˜ ์‹œ๊ฐ„ ๊ด€๋ จ ์—ฐ์‚ฐ์ž๋“ค์„ ๋ณดํ†ต ์œ ํ‹ธ๋ฆฌํ‹ฐ ์—ฐ์‚ฐ์ž๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 

 

 

delay()

 

amb ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๊ทธ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด์„œ ์ž ๊น ์‚ฌ์šฉํ–ˆ๋˜ ์—ฐ์‚ฐ์ž์ธ๋ฐ์š”. ์ด๋Ÿฐ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ์˜ ๋ฐœํ–‰์„ ์ž ์‹œ ์ง€์—ฐ์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.

 

Observable.amb(Arrays.asList(Observable.just("N.K").delay(2, TimeUnit.SECONDS), Observable.just("NEONKID")))
	.subscribe(System.out::println);

์‹œ๊ฐ„ ๊ด€๋ จ ์—ฐ์‚ฐ์ž๋“ค์˜ ํŠน์ง•์œผ๋กœ๋Š” ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž๋“ค๊ณผ ๋‹ค๋ฅด๊ฒŒ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ๋กœ ์ด์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ์š”. ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์Šค๋ ˆ๋“œ์™€ ๊ฐ™์ด ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด ๋ฐ์ดํ„ฐ์˜ ์—ฐ๊ฒฐ์„ฑ์„ ๋ณด์žฅ ๋ฐ›๊ธฐ๊ฐ€ ์–ด๋ ต๊ฒ ์ฃ ?

 

 

 

timeInterval()

 

timeInterval ์—ฐ์‚ฐ์ž๋Š” ์–ด๋–ค ๊ฐ’์„ ์ƒ์‚ฐํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ธก์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๋ฐ๋งŒ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ด ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹๊ฒ ์ฃ ?

 

Observable<Timed<Integer>> src = Observable.range(20, 100).delay(item -> {
    Thread.sleep(new Random().nextInt(500));
    return Observable.just(item);
}).timeInterval();

Disposable disposable = src.subscribe(System.out::println);
disposable.dispose();

์‰ฌ์šด ์„ค๋ช…์„ ์œ„ํ•ด 20 ~ 100๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๋ฅผ range ๋ฉ”์†Œ๋“œ๋กœ ํ•˜์—ฌ๊ธˆ array ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ delay๋ฅผ ๋žœ๋คํ•˜๊ฒŒ ์ฃผ๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌ๋…๋ฐ›๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

 

์ด์ „ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ง‘๊ณ„ํ–ˆ์„ ๋•Œ 117, 118, 119๊ฐ€ ๊ฐ๊ฐ ๋ฐœํ–‰๋  ๋•Œ๋ฅผ ์ถœ๋ ฅํ•œ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค. 116์ด ๋ฐœํ–‰๋˜๊ณ  117์ด ๋ฐœํ–‰๋์„ ๋–„ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์€ 229ms, 118์ด ๋ฐœํ–‰๋์„ ๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์€ 161ms ์ด๋Ÿฐ์‹์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ๊ฐ ๋ฐœํ–‰ ๋ฐ์ดํ„ฐ๊ฐ€ ํ‰๊ท ์ ์œผ๋กœ ์–ผ๋งˆ ์ •๋„ ๊ฑธ๋ฆฌ๋Š”์ง€๋ฅผ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ˜„์žฌ ์ฝ”๋“œ๋Š” Thread์—์„œ sleep ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ตœ๋Œ€ 500ms๊นŒ์ง€ ๋ฌด์ž‘์œ„๋กœ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

 

 

๋งˆ์น˜๋ฉฐ...

๊ธธ๊ณ  ๊ธด RxJava ์—ฐ์‚ฐ์ž ์‹œ๋ฆฌ์ฆˆ Reactive ์—ฐ์‚ฐ์ž ํŒŒํ—ค์ณ๋ณด๊ธฐ ๊ธ€์ด ๋งˆ๋ฌด๋ฆฌ ๋˜์—ˆ๋Š”๋ฐ์š”. ์ž์„ธํžˆ ๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋“ค๊ณผ ํฐ ์ฐจ์ด๋Š” ์—†์ง€๋งŒ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ์ด์Šˆ์ธ ๋ฐฐ์•• ์ด์Šˆ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ํ•˜๋‚˜์˜ ์†”๋ฃจ์…˜์ด์—ˆ์Œ์„ ํ™•์ธํ— ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments