ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

iOS & swift

[RxSwift] Debounce vs Throttle

ggasoon2 2021. 4. 20. 18:14

 

๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ์— ๋”ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋…ธ์ถœํ• ๋•Œ,

ํ‚ค์›Œ๋“œ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•œ emit์„ ์ œ์–ดํ•˜๋ ค๊ณ  Debounce๋ผ๋Š” ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

RxSwift๋ฌธ๋ฒ•์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ Throttle์ด๋ผ๋Š” ์˜คํผ๋ ˆ์ดํ„ฐ๋ฅผ ์ ‘ํ–ˆ๋Š”๋ฐ, Debounce์™€ ๋น„์Šทํ•˜๋ฉด์„œ๋„ ๋ช…ํ™•ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์–ด ์ •๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

Debounce์™€ Throttle์€ ์ด๋ฒคํŠธ๋ฅผ (์–‘์ ์ธ ์ธก๋ฉด์—์„œ) ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์ฒด์ ์ธ ์ •์˜์™€ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

์šฐ์„  ๋””๋ฐ”์šด์Šค์— ๋Œ€ํ•œ ์ •์˜์ž…๋‹ˆ๋‹ค.

 

์ง๊ด€์ ์ธ ๋งˆ๋ธ” ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋จผ์ € ๋ณด์ž๋ฉด.

 

ReactiveX ๊ณต์‹๋ฌธ์„œ

์ด๋ ‡์Šต๋‹ˆ๋‹ค.

 

์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ๋“ค์–ด์™”๋Š”๋ฐ ๋งˆ์ง€๋ง‰ item๋งŒ emit ๋ฉ๋‹ˆ๋‹ค.

 

์ฆ‰, ์ผ์ •ํ•œ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์ด ์ง€๋‚˜๊ธฐ ์ „์— ๊ฐ’์ด ๋“ค์–ด์˜ค๋ฉด ๊ทธ ๊ฐ’๋“ค์€ emit ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 

 

๊ทธ๋Ÿฌ๋‹ˆ๊น ๊ฐ„๊ฒฉ์ด 1์ดˆ๋ผ๊ณ  ํ–ˆ์„ ๋•Œ! ๊ฐ’์„ ๋ฐ›๊ณ  ๋‚œ ํ›„ 1์ดˆ๊ฐ€ ์ง€๋‚˜์•ผ ๋งŒ ๋ฐ›์€ ๊ฐ’๋“ค ์ค‘ ๊ฐ€์žฅ ์ตœ์‹  ๊ฐ’์„ ๋ฐฉ์ถœํ•ฉ๋‹ˆ๋‹ค.

 

์ €์˜ ์˜ˆ์ œ๋ฅผ ํ•œ๋ฒˆ ๋ณด์„ธ์š”.

 

 

 

 

ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ ์ž…๋ ฅ๋ฐ›์€ ํ‚ค์›Œ๋“œ๋“ค์— ๋Œ€ํ•˜์—ฌ ์ž…๋ ฅ์„ ๋ฉˆ์ถ”๊ณ  ๋‚œ ๋’ค 1์ดˆ ๋’ค์˜ ๊ฐ’์„ emit ํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ ๋”” ๋ฐ”์šด์Šค๊ฐ€ ์—†์„ ๋•Œ apple์ด๋ผ๊ณ  ํ‚ค์›Œ๋“œ๋ฅผ ์น˜๋ฉด (๋น ๋ฅด๊ฒŒ ํƒ€์ดํ•‘ํ–ˆ๋‹ค๋Š” ๊ฐ€์ •)

 

'a', 'ap', 'app', 'appl', 'apple' 5๊ฐœ์˜ ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•˜์—ฌ emit์ด ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ Debounce๋ฅผ ๊ฑธ์—ˆ๋‹ค? ๊ทธ๋Ÿฌ๋ฉด ๋งจ๋งˆ์ง€๋ง‰ 'apple'์— ๋Œ€ํ•œ ํ‚ค์›Œ๋“œ๋งŒ emit ํ•˜๋„๋ก ํ•ด์ค˜์š”.

 

ํ™•์‹คํžˆ ์–‘์ ์ธ ์ธก๋ฉด์—์„œ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

 

Debounce ์ดํ•ด๊ฐ€ ๋˜์…จ์œผ๋ฆฌ๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๋‹ค์Œ์€ Throttle.

 

Throttle์€ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์š”์ฒญ์ด ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. 

 

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์„ 2์ดˆ๋กœ ๋‘๋ฉด 2์ดˆ ๋™์•ˆ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ฑฐ์ฃ .

 

 

 

??? : Debounce๋ž‘ ๋น„์Šทํ•œ๋ฐ? ๊ตฌ๋ถ„์ด ์•ˆ๊ฐ€๋„ค..

 

 

https://rxmarbles.com/#throttle

 

 

Debounce์™€ Throttle์— 10์ดˆ ๋™์•ˆ ์—ฐ์†๋œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค๊ณ  ํ•˜๋ฉด (๋‘˜ ๋‹ค ์‹œ๊ฐ„ ๊ฐ’ 2s)

 

Debounce๋Š” 10์ดˆ + 2์ดˆ ํ›„ 1๋ฒˆ ์ด๋ฒคํŠธ ๋ฐœ์ƒ 

 

Throttle์€ 10์ดˆ ๋™์•ˆ 5๋ฒˆ ์ด๋ฒคํŠธ๋ฅผ ๋ฐฉ์ƒ

 

 

 

(์ฐจ์ด์  ์•„์‹œ๊ฒ ๋‚˜์š”?)

 

 

 

ํŠธ์œ„ํ„ฐ์—์„œ ์Šคํฌ๋กค ๊ด€๋ จ ๋ฒ„๋ฒ…๊ฑฐ๋ฆผ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ์จ ์ œ์•ˆํ•œ ๋ฐฉ๋ฒ•๋ก ์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

Throttle์— ๋Œ€ํ•ด์„œ ์ €๋„ ์ด๋ฒˆ์— ์•Œ๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.

 

ํŽ˜์ด์ง€ ๋งˆ์ง€๋ง‰ ์Šคํฌ๋กค์—์„œ ์•„๋ž˜๋กœ ๋” ๋‚ด๋ฆฌ๋Š” ์Šคํฌ๋กค(์ธํ”ผ๋‹ˆํ‹ฐ ์Šคํฌ๋กค)์„ ํ•  ๋•Œ 1๋ฒˆ๋งŒ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ ค๊ณ 

 

์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ์ง€ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ if-flag๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ์—ˆ๋Š”๋ฐ, ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

 

๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•œ ์ด๋ฏธ์ง€์˜ ๊ฒฐ๊ณผ๋ฅผ ์Šคํฌ๋กค ๋•Œ๋งˆ๋‹ค 30๊ฐœ์”ฉ fetch ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์˜์ƒ์ž…๋‹ˆ๋‹ค.

 

ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ ์ด๋ฒคํŠธ ์ œ์–ด๋Š” Debounce, ์Šคํฌ๋กค ์ด๋ฒคํŠธ ์ œ์–ด๋Š” Throttle๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

www.youtube.com/watch?v=IcKxjbDUwKY

 

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

๋ถ€์กฑํ•œ ๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค:)

 

 

๋Œ“๊ธ€