Swift Concurrency
-
Swift Concurrency - @MainActor ์ฌ์ฉํ๊ธฐConcurrency 2023. 3. 27. 10:47
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ @MainActor๋ฅผ ์ฌ์ฉํด ๋ฉ์ธ ํ์์ UI ์ ๋ฐ์ดํธ๋ฅผ ์๋์ผ๋ก ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ํ์ตํด๋ณด๊ฒ ์ต๋๋ค๐๐ป โ๏ธ UI ์ ๋ฐ์ดํธ๋ ๊ผญ ๋ฉ์ธ ์ค๋ ๋์์ ์งํ๋์ด์ผ ํ๋ค ์ฐ์ ๋ค๋ค ์๋ค์ํผ iOS์์ UI ์ ๋ฐ์ดํธ์ ๊ดํ๊ฑด ๋ชจ๋ ๋ฉ์ธ ์ค๋ ๋์์๋ง ์ ๋ฐ์ดํธ ํด์ผํ๋ค๋ ์ ์ ๋๋ค. ๋ง์ฝ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์๋ ํ ๋ฐฑ๊ทธ๋ผ์ด๋ ๊ฐ์ ์ค๋ ๋์์ UI ์ ๋ฐ์ดํธ๋ฅผ ์น๋ค๋ฉด ์๊ธฐ์น ๋ชปํ ๋์์ด ๋ฐ์ํ ์ ์๊ณ ๋ํ ๊ฒฝ๊ณ ๋ฅผ ๋ด๋ณด๋ด์ฃ ! ๋ฐ๋ผ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์ง์ ํน์ ๊ฐ์ ์ ์ผ๋ก ์์ ์ ์ํํ ๋๋ง๋ค UI ๋ ๋๋ง๊ณผ ๊ด๋ จํ ์์ฑ ๋ฐ ๋ฉ์๋์ ์ ๊ทผํ๊ธฐ ์ ์ ๊ผญ ๋ฉ์ธ ์ค๋ ๋๋ก ์ด๋์์ผ์ผ ํฉ๋๋ค. ๋ฌผ๋ก ๋น์ฐํ๊ฑฐ ์๋์ผ? ๋ผ๊ณ ์๊ฐ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ์์ ์ ํ๋ค๋ณด๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์..
-
Swift Concurrency - ActorConcurrency 2023. 3. 20. 11:16
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ Actor๊ฐ ๋ฌด์์ธ์ง ๊ฐ๋จํ ์ดํด๋ณด๊ณ Swift Concurrency์์ ์ด๋ป๊ฒ ํ์ฉ๋๋์ง ํ์ตํด๋ณด๊ฒ ์ต๋๋ค๐๐ป ์ฐ์ Swift์์๋ ๋ค๋ค ์์๋ค์ํผ ๋ค์ํ ์ ํ์ ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐ ํ์ ๋ฑ์ผ๋ก ์ ์ํ ์ ์์ต๋๋ค. ๊ฑฐ๊ธฐ๋ค Swift 5.5์์๋ถํฐ๋ Swift Concurrency๊ฐ ๋์ ๋๋ฉด์ actor๋ผ๋ ์๋ก์ด ์ ํ์ด ์ง ํ๊ณ ๋ํ๋ฌ์ด์โญ๏ธ ๊ทธ๋ผ ์ฐ์ actor ํ์ ์ ์ ์ด๋ป๊ฒ ๊ธฐ์กด ์ ํ์ ๊ฐ์ง๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์๊น์? ๋ฐ์ดํฐ ๊ฒฝํฉ ๋ฐฉ์ง Swift์ ์๋ก์ด ์ ํ์ธ actor์ ๊ฐ์ฅ ํต์ฌ์ ์ธ ์ฅ์ ์ค ํ๋๋ race condition, ์ฆ ๋ฐ์ดํฐ ๊ฒฝํฉ์ด๋ผ๋๊ฒ์ ๋ฐฉ์งํด์ค ์ ์์ต๋๋ค. ๋ ๊ฐ์ ๊ฐ๋ณ ์ค๋ ๋๊ฐ ๋์์ ๋์ผํ ๋ฐ์ดํฐ์ ์์ธ์คํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ค๊ณ ํ ๋..
-
Swift Concurrency - ์ด์ ๋ฒ์ ์์ ๋น๋๊ธฐ ์์คํ API ์ฌ์ฉํ๊ธฐConcurrency 2023. 3. 16. 13:54
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ ๋น๋๊ธฐ ์์คํ API๋ฅผ ์ด์ ๋ฒ์ ์์ ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌํํ๋ ํ์ต์ ํด๋ณด๊ฒ ์ต๋๋ค๐ Swift Concurrency๊ฐ iOS 13๋ถํฐ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ฒ ๋์์ด๋ ๊ณ์ ๋๋ฒจ๋กญ์ ๊ฑฐ์ณ ์์ต๋๋ค. (๋น์ฐํ์ง๋ง!?) ๊ทธ๋ ๊ธฐ์ ์ค๋ ์์๋ก ๋ค์ด๋ณผ iOS 15 ์ด์์์ URLSession ๋คํธ์ํน์์ ํธํ๊ฒ async/await๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ๊ทธ ํ์ ๋ฒ์ ์ธ iOS 13, 14๋์์๋ ์ง์ ์ฌ์ฉํ์ง ๋ชปํ๋ ๋ถํธํจ์ด ์์์ด์๐ญ ์ด์ ํฌ์คํ ์์๋ ์ ๊น ๋์๋๋ฐ Swift 5.5 ๋ถํฐ ๋น๋ก์ ๊ธฐ์กด ์ฝ๋์์๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๊ฒ ๋ณํํ๋ค๊ณ ํ์ฃ ? ์ฆ Xcode 13.2๋ถํฐ ํธํ์ด ๋์ง๋ง ๊ทธ ๊ธฐ์ค์ด OS๋ก๋ iOS 15, macOS Monterey์ ๋๋ค. ๊ทธ๋์ ์ค๋ ..
-
Swift Concurrency - Throwing & ๋น๋๊ธฐ Swift ํ๋กํผํฐConcurrency 2023. 3. 14. 08:47
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ ํ๋กํผํฐ์ ๋ํด ์กฐ๊ธ ๋ค๋ค๋ณผ ์์ ์ด์์. ์ ํํ๋ Throwing ๋ฐ ๋น๋๊ธฐ ์์ฑ์ ํ๋กํผํฐ๋ฅผ ํ์ตํด๋ณด๊ฒ ์ต๋๋ค๐๐ป Throwing ํ๋กํผํฐ ์์๋ก ๋๋ฌด ์ต์ํ ์๋์ ๊ฐ์ Result ํ์ ์ ๋ฐํํ๋ throws ๋ฉ์๋๊ฐ ์๋ค๊ณ ์๊ฐํด๋ณผ๊ป์. func handleLoginResult(_ result: Result) throws { let user = try result.get() ... } ์ฌ๊ธฐ์ get ๋ฉ์๋๋ ์ค์ ๋ก ์ด๋ค ์ข ๋ฅ์ ์์ ๋ ์ํํ์ง ์๊ณ try ํค์๋๋ฅผ ์ฌ์ฉํด Result ๊ฐ์ ๋ง๋ค ์ ์๊ธฐ์ ํ๋กํผํฐ๋ก ์ ์ธํ ์ ์์ด์. ์ ๊ทธ๋ผ ์๋์ ๊ฐ์ด ๋ง๋ค ์ ์๊ฒ ์ฃ ? extension Result { var value: Success { get thr..
-
Swift Concurrency - Async sequence & streamConcurrency 2023. 3. 9. 09:10
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ ๋น๋๊ธฐ ์ํ์ค์ ์คํธ๋ฆผ์ ๋ํด ์์๋ณด๊ณ ๊ธฐ์กด ์ปด๋ฐ์ธ ์ฝ๋์ ์ด๋ป๊ฒ ๋ น์ฌ๋ด๋์ง ํ์ตํด๋ณด๊ฒ ์ต๋๋ค๐๐ป ์ผ๋ฐ์ ์ผ๋ก for๋ฌธ ๊ฐ์ด ๋ฃจํ๋ฅผ ๋๋ฉฐ Swift ์ปฌ๋ ์ ์ ๋ฐ๋ณตํ ๋ ๋ฐ๋ณตํ ์ฝ๋์ ์ ๋ฌ๋ ์์๋ฅผ ๊ฒฐ์ ํ๋๋ฐ์๋ ๋๊ฐ์ง ํต์ฌ ์์๊ฐ ์์ต๋๋ค. sequence์ iteratorโญ๏ธ ๋ญ๊ฐ ํ๋ฒ์ฉ์ ๋ค ๋ค์ด๋ดค๊ณ , ์ด ์ด๋์ ๋ดค๋๋ฐ? ์ถ์ผ์ค๊ฑฐ์์! ์๋ฅผ๋ค๋ฉด Swift์ array ํ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก sequence ํ๋กํ ์ฝ์ ์ค์ํ๋ฉฐ iterator ํ์ ์ผ๋ก IndexingIterator๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฐ๋ฆฌ๋ Swift ์ฝ๋ ์์ฑ ์ ์ํ์ค์ ์ง์ ์ํธ ์์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋งค์ฐ ๋ง์ง๋ง for ๋ฃจํ๋ฅผ ์ฌ์ฉํ ๋๋ง๋ค Swift ์ธ์ด ์์ฒด๊ฐ ์ด๋ฌํ ์ธ์คํด์ค๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํด์ฃผ๊ธฐ ๋๋ฌธ์..
-
Swift Concurrency - map & forEachConcurrency 2023. 3. 9. 07:51
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ map๊ณผ forEach์ ๋ํด Swift Concurrency ์ธ์์ผ๋ก ๊ฐ์ ธ์ ๋น๋๊ธฐ ๋ฐ ๋์(๋ณ๋ ฌ) ์ฒ๋ฆฌ๋ฅผ ํด๋ณด๊ฒ ์ต๋๋ค๐ ์ฐ๋ฆฌ๋ ๋ง์ ๋ฐ์ดํฐ๋ค์ด ๋ค์ด์ฌ๋ map๊ณผ forEach๋ก ์ข ์ข ๋ค๋ค์ฃผ๊ณค ํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ํด๋น ๋ฐ์ดํฐ๋ค์ ๋ค๋ค์ค๋ ํญ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ผ์ด๋์ง ์์๋ฟ๋๋ผ ํด๋น ๋ด๋ถ ์์ ๋ค์ ๋์ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์ต๋๋ค. ์ฆ ํ ์ค๋ ๋์์ ๋๊ฒ๋๊ณ ์ฒ๋ฆฌํ ๊ฒ์ด ๋ง์์ง๋ฉด ๋ค๋ฅธ ์์ ์ ๋ณ๋ชฉ์ด ์๊ธธ๋๊ฐ ์์ฃ . ๊ทธ๋์ ์ด๋ฒ ์ฃผ์ ๋ ์ด๋ฐ ๋ฐ์ดํฐ ๋ณํ์ ์ํํ ๋ Concurrency์ ๋์์ฑ ์์คํ ์ ํ์ฉํด๋ณด๋ ค๊ณ ํฉ๋๋ค! ๋๊ธฐ ๋ณํ ์ฐ์ ์ฐ๋ฆฌ๊ฐ ์์ฃผ ์ต์ํ ๊ตฌ์กฐ๋ถํฐ ๋ณผ๊ป์. class MovieListViewController: UIViewController { privat..
-
Swift Concurrency - ParallelConcurrency 2023. 3. 6. 08:56
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ Swift Concurrency Task์ ์๊ฐ์ ์ด์ด ์ฌ๋ฌ Task๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ํ์ตํด๋ณด๊ฒ ์ต๋๋ค๐ ์ฐ๋ฆฌ๊ฐ Swift Concurrency๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ๊ทผ๋ณธ์ ์ธ ์ด์ ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๋ค๋ฃจ๋๊ฒ๋ ์์ง๋ง ์ด๊ฑธ ๋ค๋ฃจ๋ ์ด์ ์์ฒด๊ฐ ๋น๋๊ธฐ ์์ ์ ๋ณ๋ ฌ๋ก ๋๋ถ๋ถ ์ํํ๊ธฐ์ ์ด์ ์ ๊ฐ์ ธ๊ฐ๊ธฐ ์ํจ๋ ์์๊ฑฐ์์! ์ฆ, Swift์ ๋ด์ฅ๋ ๋์์ฑ ์์คํ ์ ์ด์ ์ค ํ๋๋ก ๋น๋๊ธฐ ์์ ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ๊ผฝ์ ์ ์์ต๋๋ค. ๊ทธ๋ผ ๋น๋๊ธฐ ์์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ ๋ช๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์์ฃ ๐บ๐ป ๋น๋๊ธฐ ์์ ์ ๋์์ฑ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ด๋ค ํ ํด๋์ค์ ๋ค์ํ ๋น๋๊ธฐ ์์ ์ ์ํํ๋ ๋ฉ์๋๊ฐ ์๋ค๊ณ ์๊ฐํด๋ณผ๊ป์. class ProductLoader { ... func loa..
-
Swift Concurrency - Task (4)Concurrency 2023. 3. 2. 12:11
์๋ ํ์ธ์. ๊ทธ๋ฆฐ์ ๋๋ค๐ ์ด๋ฒ ํฌ์คํ ์์๋ ์ด์ ๋๋์ด Task ํํ์ ๋ง์ง๋ง! ๋น๋๊ธฐ Swift Task์์ ์๋ ์ฌ์๋์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค๐ ์ ๋ฒ ํฌ์คํ ์์๋ Task์ ์ง์ฐ์ ๊ฑฐ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ดค๋ค๋ฉด ์ด๋ฒ ํฌ์คํ ์์๋ Task๋ฅผ ์๋์ผ๋ก ์ฌ์๋ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์์ฃ ! Task ์๋ ์ฌ์๋ ์ฐ๋ฆฌ๋ ๋คํธ์ํฌ ํต์ ์ ํ ๋ ํ๋ฒ์ ์๋ต๋์ง ์๋ ์ํฉ๋ค๋ ์์ต๋๋ค. ํด๋ผ์ ์๋ชป๋ ์์ฒญ์ด ์๋ ์๋ฒ์์ ๋ด๋ถ์ ์ธ ์์ฃผ ์ ๊น์ ์ด์๋ผ๋์ง ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ฃ . ์ฆ ์ด๋ฐ ๊ฒฝ์ฐ ๋์ผํ๊ฒ ์คํจํ ๋น๋๊ธฐ Task ์์ฒญ์ ์๋์ผ๋ก ์ฌ์๋ ํด์ผํฉ๋๋ค. ๋ง์ฝ Swift Concurrency๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ฐ๋ฆฌ๊ฐ ๊ทธ์ ์ ์ต์ํ Combine์ ์ฌ์ฉํ๋ค๋ฉด ์๋์ ๊ฐ์ด retry๋ก ์๋ฌ ์ฒ๋ฆฌ ์ ์ต๋ 3๋ฒ์ ์ฌ์๋๋ฅผ ๊ฑฐ..