๋ค์ด๊ฐ๋ฉฐ
Swift๋ ๊ณ์ ์ฑ์ฅ ์ค์ธ ์คํ ์์ค ํจํค์ง ์นดํ๋ก๊ทธ์
๋๋ค.
๋ณธ๋ก ์ผ๋ก ๋ค์ด๊ฐ๊ธฐ ์ ์ AsyncSequence ํ๋กํ ์ฝ์ ํ ๋ฒ ์๊ธฐํด ๋ด
์๋ค.
AsyncSequence Recap
AsyncSequence ํ๋กํ ์ฝ์ ๋น๋๊ธฐ ์์ฑ๊ฐ์ ๊ธฐ์ ํ ์ ์๊ฒ ํด์ค
๋ฐ๋ณต์ ๋ค์ ํจ์(next function form its iterator)๋ Swift ๋์์ฑ์ ์ฌ์ฉํด ๊ฐ์ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ ๋น๋๊ธฐ ํจ์์
๋๋ค.
โข
Swift์ throw๋ฅผ ํตํด ์ ์ฌ์ ์ธ ์ฅ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
โข
Sequence์์์ฒ๋ผ for-await-in ๊ตฌ๋ฌธ์ผ๋ก ์ด๊ฑธ ๋ฐ๋ณตํ ์ ์์ต๋๋ค.
for-await-in syntax
AsyncSeqence๋ฅผ ๋์
ํ๋ฉด์ Sequence์์ ์ฐพ์๋ณผ ์ ์๋ ๋ชจ๋ ํด์ ๋น๋๊ธฐ ๋ฒ์ ์ผ๋ก ์ถ๊ฐํ์ต๋๋ค.
๊ณ ๊ธ ์๊ณ ๋ฆฌ์ฆ์ ํตํฉํ๊ณ ๊ฐ๋ ฅํ ๊ฑธ ์ ๊ณตํ๊ณ ์ Clock์ ์ํธ ์ด์ฉ๋์ฃ . Swift ๋์์ฑ์ ๋๋ฆฌ๋ AsyncSequence ์๊ณ ๋ฆฌ์ฆ์ ์คํ ์์ค ํจํค์ง์
๋๋ค.
์๋
Swift Algorithm ํจํค์ง๋ฅผ ์๊ฐํ๊ณ ๊ทธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ฆ๋ช
ํ๊ณ ์ ๋ฉ์์ง ์ฑ์ ๋ง๋ค์์ต๋๋ค.
Multi-input algorithms
๋จผ์ , ์ฐ๋ฆฌ์๊ฒ๋ ๋ค์ค ์
๋ ฅ AsyncSequence๋ก ์๋ํ๋ ํน์ ์๊ณ ๋ฆฌ์ฆ๋ค์ด ์์ต๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ๋ค์ AsyncSequence๋ฅผ ๋ค์ํ ๋ฐฉ์์ผ๋ก ๊ฒฐํฉํ๋๋ฐ์.
์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ ๋ฒ ์ด์ค์์ ๊ฒฐ๊ณผ ํํ์ ์์ฑํ๊ธฐ ์ํด ๋ค์ค ์
๋ ฅ์ ์ทจํ๊ณ ๊ทธ๊ฒ์ ๋ฐ๋ณตํฉ๋๋ค.
โข
์
๋ ฅ๋ฌผ ๊ฐ๊ฐ์ Zip์ด ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๊ณ ์๋ ๋ฒ ์ด์ค์
๋๋ค.
โข
๋น๋๊ธฐ Zip ์๊ณ ๋ฆฌ์ฆ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ Zip๊ณผ ์ ์ฌํ๊ฒ ์๋ํ๋, ๋์์ ๋ฒ ์ด์ค ๊ฐ๊ฐ์ ๋ฐ๋ณตํ๊ณ ๋ฐ๋ณต ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋ค์ throw ํฉ๋๋ค.
๋ฐ๋ณต๊ณผ ์ค๋ฅ rethrow๋ฅผ ๋์์ ํ๋ ๊ฒ์ ๋ ๋ณต์กํด์ง ์ ์์ต๋๋ค.
ํ์ง๋ง Swift Async Algorithm์ ๋ฉ์์ง ์ฑ์์ ๊ทธ๊ฑธ ๋ชจ๋ ๋ค๋ฃฐ ์ ์์์ฃ .
[Zip ์์]
ํจ์จ์ ์ธ ์ ์ฅ๊ณผ ์ ์ก์ ์ํด ์์์ ๋ค์ํ ํฌ๊ธฐ๋ก ํธ๋์ค์ฝ๋ฉํ๋ฉด์ ๋น๋๊ธฐ ์กฐ์ ํ๋ ์ฝ๋๊ฐ ์ด์ ์๋ ์์๋๋ฐ์.
โข
Zip ์์ฒด๊ฐ ์ด๋ค ์ชฝ์์ ๋จผ์ ๊ฐ์ ์์ฑํ๋์ง ๋ ์ ํธํ๋ ๊ฒ์ด ์๊ธฐ ๋๋ฌธ์ ์์์ด๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ ์ค ์๋ฌด๊ฑฐ๋ ๋จผ์ ์์ฑ๋๊ณ ์ด๋ ์ชฝ์ด๋ ๊ฐ์ ๋ค๋ฅธ ์ชฝ์ด ํํ์ ์๋ฃํ ๋๊น์ง ๊ธฐ๋ค๋ฆด ๊ฒ๋๋ค.
โข
Zip์ ํํ์ ๊ตฌ์ถํ๊ธฐ ์ํด ์๋ก๋ฅผ ๊ธฐ๋ค๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ ํจ๊ป ์
๋ก๋๋ ์ ์๋๋ก ์ง์ ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์
๋ ฅ ๋ฉ์์ง๋ฅผ AsyncSequence๋ก ๋ชจ๋ธ๋งํ๋ ๊ฒ์ด ๊ฝค ํ๋นํ ๊ฒ์ด๋ผ๋ ๊ฒฐ๋ก ์ ๋ด๋ ธ์ต๋๋ค.
AsyncSequence๋ ๋ช
๋ น์ ๋ณด์กดํ์ฌ ์ฝ๋ฐฑ์ ๋ฉ์์ง ๋น๋๊ธฐ ์ํ์ค๋ก ๋ฐ๊ฟ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฉ์์ง ์ฒ๋ฆฌ์ ๋น๋๊ธฐ ์คํธ๋ฆผ์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๊ฐ ๊ณ์ ์์ ์
๋ ฅ ๋ฉ์์ง์ AsyncSequence๋ฅผ ๋ง๋ค์์ผ๋ ๋ง์ ๊ตฌํํ๋ ค๊ณ ํ๋ ํ๋์ AsyncSequence๋ก ์ฒ๋ฆฌํด์ผ ํ๊ฑฐ๋ ์.
Merge ์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ์ถฐ์ ธ ์๋๋ฐ์.
โข
์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ค AsyncSequence๋ฅผ ๋์์ ๋ฐ๋ณตํ๋ค๋ ์ ์์ Zip๊ณผ ๋น์ทํ๊ฒ ์๋ํฉ๋๋ค.
โข
ํ์ง๋ง ๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด,
โฆ
์ง์ ์ด๋ฃจ๋ ํํ ๋์ ๋ฒ ์ด์ค๊ฐ ๋์ผ ์์ ํ์
์ ๊ณต์ ํด์ผ ํฉ๋๋ค.
โฆ
๋ฒ ์ด์ค AsyncSequence๋ฅผ ํด๋น ์์์ ํน์ด AsyncSequence ํ๋์ ๋ณํฉํฉ๋๋ค.
[Merge ์์]
๋ณํฉ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ณต ์ ํ ์ชฝ ๊ณ์ ์์ ๋จผ์ ์์ฑ๋ ์์๋ฅผ ์ทจํฉ๋๋ค. ๋ชจ๋ ๋ฒ ์ด์ค AsyncSequence๊ฐ ๋ฐ๋ณต์์์ ์๋ฌด๊ฒ๋ ๋์ถํ์ง ์์ ๋๊น์ง ๋ฐ๋ณต์ ๊ณ์ ๋ฉ๋๋ค. ๋ฒ ์ด์ค์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๋ค๋ฅธ ๋ฐ๋ณต์ ์ทจ์๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ์์ง๋ฅผ AsyncSequence๋ฅผ ์ทจํ๊ณ ๋ณํฉํ ์ ์์ฃ . ์ด Merge ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ ์์ฑ ์ ๋์์ ์๋ํ์ง๋ง ๊ฐํน ์๊ฐ๊ณผ ์ํธ ์์ฉํ๋ ๊ฒ ์ ์ฉํ ๋๊ฐ ์์ต๋๋ค.
Clock, instant, duration
์ด๋ฒ ํจํค์ง๋ ํน์ ์๊ณ ๋ฆฌ์ฆ์ ๋์
ํด Swift ๋ด ์๋ก์ด Clock API๋ฅผ ์ด์ฉํจ์ผ๋ก์จ ์๊ฐ๊ณผ ์๋ํฉ๋๋ค. ์๊ฐ ๊ทธ ์์ฒด๋ ๊ต์ฅํ ๋ณต์กํ ์ฃผ์ ๋ก Swift 5.7์ clock, instant, duration ํ์
์ ์๊ฐ์ ์์ ํ๊ณ ์ผ๊ด๋๊ฒ ํ๋ ์ผ๋ จ์ API์
๋๋ค.
Clock ํ๋กํ ์ฝ์ 2๊ฐ์ ํ๋ฆฌ๋ฏธํฐ๋ธ๋ฅผ ์ ์ํฉ๋๋ค.
Clock์๋ ์ฌ๋ฌ ๊ฐ์ง ๊ตฌ์กฐ๊ฐ ๋ค์ด๊ฐ ์๋๋ฐ ํํ ์ฐ์ด๋ ๊ตฌ์กฐ ์ค ๋ ๊ฐ์ง๋ ๋ฐ๋ก continuous clock๊ณผ Suspending Clock์
๋๋ค.
continuous clock
์คํฑ์์น์ฒ๋ผ ์๊ฐ ์ธก์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ ์ฌ๋ฌผ ์ํ ์ธก์ ์ฌ๋ถ์๋ ์๊ด์์ด ์๊ฐ์ ํ๋ฌ ๊ฐ๋๋ค.
suspending clock
๋จธ์ ์ด ์ ์งํ๋ฉด ๋ฉ์ถ์ฃ .
์ฐ๋ฆฌ๋ ๋ฐ๋๋ผ์ธ ์ดํ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์ํ ์ ์๋๋ก ์ฑ์์ ์๋ก์ด ์๊ณ API๋ฅผ ์ฌ์ฉํ์๋๋ฐ์.
์ง์ฐํ๊ณ ์ ํ๋ ์ด๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ๊ฐ๋ฆฌํค๋ duration ๊ฐ์ ์ถ๊ฐํด ๋ฐ๋๋ผ์ธ์ ๋ง๋ค ์ ์์์ต๋๋ค.
์๋ ์คํ ๊ฒฝ๊ณผ ์๊ฐ์ ์ธก์ ํ๋ ๋ฐฉ๋ฒ๋ ์๊ตฌ์.
[์ธก์ ๊ฒฐ๊ณผ ์์]
์ด ๋ ์๊ณ์ ์ฃผ์ ์ฐจ์ด์ ์ ๋จธ์ ์ด ์ ์งํ์ ๋์ ๋ฐ์์์ ๋ํ๋๋๋ฐ์.
๋ณดํต ์ด ์ฐจ์ด๋ ์ฃผ์ ํน์ง์ด ์คํ ์๊ฐ์ ์ค๋จํจ์ผ๋ก์จ ์ ๋๋ฉ์ด์
๊ณผ ๊ฐ์ ๊ฒ๋ค์ ์์ํ๋๋ก ์๋ํ๊ฒ ํ๋ ์ฃผ์ ์ธ๋ถ ์ฌํญ์ด ๋ ์ ์์ต๋๋ค.
Algorithms using time
์ ํ ํจํค์ง์์๋ ์๊ฐ๊ณผ ๊ด๋ จํ์ฌ ์ด๋ฒคํธ๊ฐ ์ ๊ฐ๋๋ ๊ฐ๋
๋ค์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ด ํ์
๋ค์ ์ฌ์ฉํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์๊ฐ์ ๋ง์ด ํ์ฉํ๋ ๋ถ์ผ๋ ๋ฉ์์ง ๊ฒ์ ์
๋๋ค.
์ฐ๋ฆฌ๋ ๊ฒฐ๊ณผ ์ฑ๋์ ๊ด๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค์์ฃ . ์ด ์ฑ๋์ ๊ฒ์ ํ
์คํฌ์์ UI๋ก ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์๋๋ค. ๊ฒ์ ํ
์คํฌ ์์ฒด์๋ ์๊ฐ๊ณผ ๊ด๋ จ๋ ๊ตฌ์ฒด์ ์ธ ํน์ฑ์ด ํ์ํ์ฃ .
Debounce ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ณต ์ ๋ค์ ๊ฐ์ ๋ด๊ธฐ ์ ์ ์ง ๊ธฐ๊ฐ์ ๋๊ธฐํฉ๋๋ค.
๊ฒ์ ํ๋์ ์ ์ ์
๋ ฅ์ด ๋น ๋ฅด๊ฒ ๋ฐ๋ ๋ ์ฐ๋ฆฌ๋ ๊ฒ์ ์ปจํธ๋กค๋ฌ๊ฐ ๊ฐ ๋ณํ์ ๊ฒ์ ์์ฒญ์ ๊ธํ๊ฒ ํ๊ธธ ์์น ์์ต๋๋ค. ๋์ ์ ํน์ ํ์ดํ์ด ์๋ฃ๋๋ ค๊ณ ํ ๋๊น์ง์ ์ ์ง ๊ธฐ๊ฐ ๋์ ๋๊ธฐํ๊ธธ ์ํ๋ ๊ฑฐ์ฃ .
Debounce ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ณธ์ ์ผ๋ก Continuous Clock์ ์ฌ์ฉํ ๊ฒ๋๋ค.
Swift ์๊ณ ๋ฆฌ์ฆ ํจํค์ง์๋ ๊ฐ์ ๋๋๋ ์ผ๋ จ์ ์๊ณ ๋ฆฌ์ฆ์ด ์๋๋ฐ์. Swift Async Algorithm ํจํค์ง์์๋ ์ด๋ค์ ์ ๊ณตํฉ๋๋ค. ๋ค์ํ Clock ๋ฐ duration๊ณผ ์ํธ ์ด์ฉํ๋ ๋ฒ์ ๋ค๋ ์ถ๊ฐ๋์์์ ๋ฌผ๋ก ์ด๊ณ ์.
ํน์ Chunk ์๊ณ ๋ฆฌ์ฆ๋ค์ ํตํด ์นด์ดํธ, ์๊ฐ, ์ฝํ
์ธ ์ ๋ฐ๋ผ ํต์ ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
*๋ง์ฝ ์ฌ๊ธฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋ค์ throwํ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ์ ๊ดํด์๋ ์์ ํ ์ฝ๋์
๋๋ค.
[Chunk ์์]
์ฐ๋ฆฌ๋ ๋ฉ์์ง ์ฒญํฌ๊ฐ ํน์ ๊ฒฝ๊ณผ ์๊ฐ๋ง๋ค ์ง๋ ฌํ๋์ด ์ ์ก๋ ์ ์๋๋ก chunked(by:) API๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
์ด ๋ฐฉ์์ผ๋ก ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ํจ์จ์ ์ธ ํจํค์ง๋ฅผ ๋ฐ์์ฃ . ๋๋ ๋ฉ์์ง๋ฅผ 50๋ฐ๋ฆฌ์ด๋ง๋ค ์
๋ ฅํ ๋๋ ์ด API๋ฅผ ์ฌ์ฉํ ์ ์์์ต๋๋ค.
Collections
์ปฌ๋ ์
์ด๋ ์ํ์ค๋ก ์์
ํ ๋๋ ์์๋ฅผ ๊ฒ์ผ๋ฅด๊ฒ(lazy) ์ฒ๋ฆฌํ๋ ๊ฒ ์ ์ฉํ๋ฉฐ ์ ์๋ํฉ๋๋ค.
AsyncSequence๋ Swift ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ด๋ฐ ์๋ ๋ฐฉ์๊ณผ ์ ์ฌํ๊ฒ ์๋ํ์ฃ . ํ์ง๋ง lazy ์๊ณ ๋ฆฌ์ฆ์ฒ๋ผ ์ข
์ข
์ปฌ๋ ์
์ธ๊ณ๋ก ๋์๊ฐ์ผ ํ ๋๊ฐ ์์ต๋๋ค.
์ ๊ท ํจํค์ง๋ AsyncSequence๋ก ์ปฌ๋ ์
์ ๊ตฌ์ถํ๊ธฐ ์ํ ์ผ๋ จ์ ์ด๋์
๋ผ์ด์ ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ค์ ํตํด ์ ํํ๋ค๊ณ ์๋ ค์ง AsyncSequence๋ฅผ ์
๋ ฅํ์ฌ Dictionary, Set, Array๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
Swift ๋๊ธฐ์ฑ ์ฌ์ฉ์ ์ํด ์ต์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์๋ ํน์์ด ๋ค์ํ๊ธฐ ๋๋ฌธ์ ๊ต์ฅํ ๋์์ด ๋์์ต๋๋ค.
์ง๊ธ๊น์ง Swift Async Algorithm ํจํค์ง์ ํ์ด๋ผ์ดํธ ์ค ๊ทน์์๋ง ๋ณด์ฌ๋๋ ธ๋๋ฐ์.
์ค๋ ๋ณธ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ์๊ณ ๋ฆฌ์ฆ์ด ์์ต๋๋ค.
Swift Async Algorithms ํจํค์ง๋ ์๊ฐ์ ๋ฐ๋ผ ์ฒ๋ฆฌํ ์ ์๋๋ก ์๊ณ ๋ฆฌ์ฆ ์งํฉ์ ์ฌ์ฉํ๊ณ ์ด๋ฅผ ์ฑ์ ๋์์ด ๋ ์ ์๋ ๊ด๋ฒ์ํ ๊ณ ๊ธ ๊ธฐ๋ฅ์ผ๋ก ํ๋ํฉ๋๋ค.

























