Combine์ ์คํธ๋ฆผ์ ๊ฒฐ๊ตญ ์๊ฐ์ ๋ฐ๋ผ ๋ฐ์ํ๋ ์ด๋ฒคํธ์ ๋์ด์ด๋ค. ๋ฐ๋ผ์ ์ด๋ฒคํธ ๋ฐ์์์ ์ ๋งค์ฐ ์ค์ํ๋ค. Timing ์ฐ์ฐ์๋ ์ด๋ฌํ ์ด๋ฒคํธ ๋ฐ์ ์์ ์ ๋ํด ์กฐ์ํ ์ ์๋ ์ฐ์ฐ์์ด๋ค. ๋จผ์ Delay ์ฐ์ฐ์๋ ๋ง๊ทธ๋๋ก ์ด๋ฒคํธ ๋ฐ์์์ ์ ๋ฆ์ถฐ์ฃผ๋ ์ฐ์ฐ์์ด๋ค. ์ด๋ ์ฃผ์์ฌํญ์ ๋ฆ์ถ๋ ์๊ฐ์ ๊ทธ๋ฅ Int๊ฐ์ผ๋ก ๋ฐ๋ ๊ฒ์ด ์๋ Dispatchqueue.SchedulerTimeTypes.Stride๋ก ๋ฐ๋๋ค. ๋ง์ฝ Int๊ฐ์ผ๋ก ์ฃผ๊ณ ์ถ๋ค๋ฉด for ํ๋ผ๋ฏธํฐ์ ๋ท ์ธ์ปจ๋ ๋ฑ์ผ๋ก ๋ฃ์ด์ฃผ์ด์ผํ๋ค. ๋ํ ๋ฉ์ธ ์ค๋ ๋์์ ๋๋ฆด๊ฑด์ง ๊ธ๋ก๋ฒ์์ ๋๋ฆด๊ฑด์ง๋ ์ง์ ํด์ค ์ ์๋ค.
์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด collect(byTime) ์ฐ์ฐ์๋ ํน์ ์๊ฐ๋์ Upstream์ ์ด๋ฒคํธ๋ฅผ ๋ชจ์๋ค๊ฐ ๋ค์ด์คํธ๋ฆผ์ ๋ด๋ ค๋ณด๋ด์ฃผ๋ ์ฐ์ฐ์์ด๋ค. ์ด๋ ๊ฒ ํ์ด๋ฐ ์ฐ์ฐ์๋ค์ ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ์ธ์ ํ ์ง๋ ์ ๊ฒฝ์จ์ฃผ์ด์ผํ๋ค.
debounce() ์ฐ์ฐ์๋ ๋น ๋ฅธ์๊ฐ๋์ ๊ฐ์๊ธฐ ์ฐํ์ฃฝ์ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ฅผ ๊ทธ๋ฃนํํ์ฌ, ์ผ์ ์๊ฐ๋์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด ๋ง์ง๋ง ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ ์ฐ์ฐ์์ด๋ค. ํ ์คํธํ๋ ์ ๋ ฅ ์ฒ๋ฆฌ ๊ฐ์ ๋น ๋ฅด๊ฒ ๋ณํ๋ ๊ฐ๋ค์ ์ฒ๋ฆฌํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋์ด, ์ ๋ ฅ ๊ฐ์ ๋ถํ์ํ ๋ฐ๋ณต ์ฒ๋ฆฌ๋ฅผ ๋ฐฉ์งํ๊ธฐ์ ์ ์ฉํ๋ค.
Throttle ์ฐ์ฐ์๋ ์ผ์ ์ฃผ๊ธฐ๋ง๋ค ์ด๋ฒคํธ๋ฅผ ์บ์นํด ์ ๋ฌํ๋ ์ฐ์ฐ์์ด๋ค. debounce ์ ์ ์ฌํ ์ฐ์ฐ์์ธ๋ฐ ์ฐจ์ด์ ์ ์์๋ณด์. ๋จผ์ debounce๋ ์ง์ ๋ ์๊ฐ ๋์ ์ถ๊ฐ ์ด๋ฒคํธ๊ฐ ์์ ๋๋ง ๋ง์ง๋ง ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์ถํ๋ ๋ฐ๋ฉด, throttle์ ์ง์ ๋ ์๊ฐ ๊ฐ๊ฒฉ ๋์ ์ฒซ ๋ฒ์งธ ์ด๋ฒคํธ๋ฅผ ๋ฐฉ์ถํ๊ณ , ๋๋จธ์ง๋ ๋ฌด์ํ๊ฑฐ๋ ๋ง์ง๋ง ์ด๋ฒคํธ๋ง์ ์ ํ์ ์ผ๋ก ๋ฐฉ์ถํ๋ค. ์ด๋ฅผ ์ ์ฉํ์๋ฉด debounce๋ ์ฌ์ฉ์ ์ ๋ ฅ๊ณผ ๊ฐ์ด ๋ง์ง๋ง ์ด๋ฒคํธ๊ฐ ์ค์ํ ์ํฉ์์, throttle์ ์ฃผ์ ๊ฐ๊ฒฉ ๊ฐฑ์ ๊ณผ ๊ฐ์ด ๊ณผ๋ํ ์ด๋ฒคํธ ๋ฐ์์ ์ค์ด๋ ์ํฉ์์ ์ฌ์ฉํ ์ ์๋ค.
์ฐจ์ด๋ฅผ ๋น์ ์ ์ผ๋ก ์ค๋ช ํ์๋ฉด debounce๋ ๋ฒ์ค ์ ๋ฅ์ฅ์์ ๋ฒ์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํฉ๊ณผ ๋น์ทํ๋ค. ์ฌ๋๋ค์ด ์ ๋ฅ์ฅ์ ๋์ฐฉํ ๋๋ง๋ค, ๋ฒ์ค๋ ์ถ๋ฐ์ ์กฐ๊ธ ๋ ๊ธฐ๋ค๋ฆฐ๋ค. ๋ง์ฝ ์ฌ๋๋ค์ด ๊ณ์ ๋์ฐฉํ๋ค๋ฉด, ๋ฒ์ค๋ ๊ณ์ ์ถ๋ฐ์ ๋ฏธ๋ฃจ๊ฒ ๋๋ค. ํ์ง๋ง ์ผ์ ์๊ฐ ๋์ ์๋ฌด๋ ์ ๋ฅ์ฅ์ ๋์ฐฉํ์ง ์์ผ๋ฉด, ๋ฒ์ค๋ ๊ทธ๋์์ผ ์ถ๋ฐํ๋ค. ์ฆ, ๋ง์ง๋ง ์ฌ๋์ด ๋์ฐฉํ๊ณ ๋์ ์ผ์ ์๊ฐ์ด ์ง๋์ผ ๋ฒ์ค๊ฐ ์ถ๋ฐํ๋ ๊ฒ์ด๋ค
๋ฐ๋ฉด throttle์ ๋ ์คํ ๋์์ ์ ์ฌ์๊ฐ์ ์ ํ๋ ์์ ์์ฌ ์ฟ ํฐ์ ๋๋ ์ฃผ๋ ์ํฉ๊ณผ ๋น์ทํ๋ค. ๋ ์คํ ๋์ 1์๊ฐ๋ง๋ค ์ฒซ ๋ฒ์งธ ๋์ฐฉํ ์๋์๊ฒ๋ง ์์ฌ ์ฟ ํฐ์ ์ ๊ณตํ๋ค. ์ด ์๊ฐ ๋์ ๋ค๋ฅธ ์๋์ด ๋์ฐฉํ๋๋ผ๋ ์ถ๊ฐ ์ฟ ํฐ์ ์ฃผ์ด์ง์ง ์๋๋ค. ๋ง์ฝ latest ํ๋ผ๋ฏธํฐ๊ฐ true์ธ ๊ฒฝ์ฐ, ์ด ๋น์ ์์ ๋ง์ง๋ง์ ๋์ฐฉํ ์๋์๊ฒ ์ฟ ํฐ์ ์ฃผ๋ ๊ฒ์ผ๋ก ์๊ฐํ ์ ์๋ค. ์ฆ throttle์์ฒซ ๋ฒ์งธ ์ด๋ฒคํธ๋ฅผ ์ฆ์ ์ฒ๋ฆฌํ๊ณ , ๊ทธ ํ ์ผ์ ์๊ฐ ๋์ ๋ฐ์ํ๋ ์ถ๊ฐ ์ด๋ฒคํธ๋ฅผ ๋ฌด์ํ๊ฑฐ๋ ๋ง์ง๋ง ์ด๋ฒคํธ๋ง ์ ํ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค.
timeout() ์ฐ์ฐ์๋ ๋คํธ์ํฌ ํต์ ํ ๋ ๊ฝค๋ ์ ์ฉํ๊ฒ ์ธ ์ ์๋ ์ฐ์ฐ์์ด๋ค. ์ผ์ ์๊ฐ๋์ ์ด๋ค ์ด๋ฒคํธ๋ ๋ฐ์ํ์ง ์์ผ๋ฉด ์๋ฌ๋ฅผ ๋์ง๋ฉด์ ์ข ๋ฃ์์ผ๋ฒ๋ฆฐ๋ค. (์์ ์ ์ฌ์ฉ๋ CustomStringConvertible ํ๋กํ ์ฝ์ด ๊ถ๊ธํ๋ค๋ฉด ์ฌ๊ธฐ๋ก)
measureInterval(using:) ์ฐ์ฐ์๋ ํผ๋ธ๋ฆฌ์ ๊ฐ ๊ฐ์ ๋ฐฉ์ถํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ ๊ฐ๊ฒฉ์ ์ธก์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๊ฐ ๋ฐฉ์ถ ์ฌ์ด์ ์๊ฐ ๊ฐ๊ฒฉ์ ์ธก์ ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ DispatchTimeInterval (๋๋ ์ฌ์ฉ๋ ์ค์ผ์ฅด๋ฌ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ ์ ํ ์๊ฐ ๋จ์)์ผ๋ก ๋ฐฉ์ถํ๋ค. ์ด๋ฅผ ํตํด ๋น๋๊ธฐ ์ด๋ฒคํธ์ ์๊ฐ์ ํ๋์ ๋ถ์ํ ์ ์๋ค. ์๋ฌด๋๋ ๋ถ์์ฉ ์ฐ์ฐ์์ด๋ค ๋ณด๋ ํ ์คํธ ์ฝ๋์์ ์์ฃผ ์ฌ์ฉ๋๋ค.
https://www.kodeco.com/5429795-reactive-programming-in-ios-with-combine/lessons/26
'๐ฆ Flutter' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Combine | 7. Scheduling Operators (0) | 2024.05.13 |
---|---|
Swift์์ CustomStringConvertible ํ๋กํ ์ฝ ํ์ฉํ๊ธฐ (0) | 2024.05.13 |
| Combine | 5. Combining Operators (0) | 2024.05.11 |
Flutter Widget์ ์๋์๋ฆฌ (0) | 2024.05.10 |
| Combine | 4. Filtering Operators (0) | 2024.05.09 |