๋์์ฑ(Concurrency)ํ๋ก๊ทธ๋๋ฐ - iOSํ๋ก๊ทธ๋๋ฐ์์ ํ์ํ ๋๊ธฐ, ๋น๋๊ธฐ์ ๊ฐ๋ ๋ฐ ๊ทธ๋ฅผ ํ์ฅํ GCD ๋ฐ Operation์ ๊ดํ ๋ชจ๋ ๋ด์ฉ์ ๋ค๋ฃน๋๋ค.
iOS ๋์์ฑ(Concurrency) ํ๋ก๊ทธ๋๋ฐ
iOS์์ ์ต์ ํ์ ๋ํ ์ดํด(์ฑ๋ฅ/๋ฐ์์ฑ)
๋น๋๊ธฐ(async)/๋๊ธฐ(sync) ์ฒ๋ฆฌ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋ํ ์ดํด
iOS ๋์คํจ์นํ(GCD)์ ๋ํ ์ดํด
๋์คํจ์น ๊ทธ๋ฃน/๋น๋๊ธฐ ๋์คํจ์น ๊ทธ๋ฃน์ ๋ํ ์ดํด
iOS ์คํผ๋ ์ด์ ํ(OperationQueue)์ ๋ํ ์ดํด
GCD/Operation์ ์ ์ฉํ ์ค์ ํ๋ก์ ํธ์ ์์
GCD/Operation์ ๋ํ A๋ถํฐ ~ Z๊น์ง
Thread-Safety์ ๋ํ ์ดํด
Thread-Safeํ ๊ฐ์ฒด ์ค๊ณ์ ์ดํด
์ด ๋ชจ๋ ๋ด์ฉ์ ์ฝ๊ฒ(๊ทธ๋ฆผ์ผ๋ก) ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ
(ํฌ๊ฒ GCD์ Operation๋ถ๋ถ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. GCD์ ๋ํด ์ ์ดํดํ๊ณ ๊ณ์๋๋ผ๋, GCD์์ ๋ฐ์ ๋ ๊ฐ๋ ์ธ Operation(์์ ํด๋์ค)์ ๋ํด์๋ ์์ํ์ค ์๋ ์์ต๋๋ค. ์ด๋ค ๋ธ๋ก๊ทธ๋ ๊ฐ์๋ณด๋ค ๋ ๋ช ํํ๊ณ ์ฝ๊ฒ, ๊ฐ์ ํ ๋ฒ์ ๋ชจ๋ ๊ฒ์ ์ดํดํ์ค ์ ์๋๋ก ๊ตฌ์ฑํ์ต๋๋ค.)
(์์ ์์ ์ฐ์ด๋ ๋ค์ํ ๊ทธ๋ฆผ ๋ฐ ๋ํ ์ค๋ช ๋ฐฉ์์ ์์์ ๋๋ค.)
(์์ ํด๋ ์์ ์๋ฃ๋ค์ด ๋ชจ๋ ์ ๊ณต๋ฉ๋๋ค.)
์์ ์ฐธ๊ณ ์๋ฃ๋ค๋ง์ผ๋ก ๋จ์ํ ๋ฒ์ญ ์์ค์ ๊ฐ์๋ฅผ ๋ง๋ค๋ ค๊ณ ํ๋ค๋ฉด ์ด๋ฐ ๊ฐ์๋ฅผ ๊ธฐํํ์ง ์์์ ๊ฒ์ ๋๋ค. ์ด ์ฃผ์ ๋ค์ ๋ํด์ ํจ์จ์ ์ด๋ฉด์ ํจ๊ณผ์ ์ธ ์ค๋ช , ์ง์ ์ ์ธ ๊ทธ๋ฆผ, ๋ํ ๋ฑ์ ์ง์ ๋ค ์์ PPT๋ก ์์ฑํ์ฌ์, ์ค์ ์ฐ๋ ๋๊ฐ ์ด๋ป๊ฒ ๋์ํ๊ณ ์๋์ง์ ๋ํ ์ง๊ด์ ์ธ ์ดํด๋ฅผ ๋๊ณ ์ ์ต์ ์ ์ค๋ช ๋ฐฉ๋ฒ์ ํํ์ต๋๋ค. ์์์๋ ๋ง์๋๋ ธ์ง๋ง ์ฐธ๊ณ ์๋ฃ๋ฅผ 10๋ฒ ์ด์์ฉ ๋ณด์๊ณ ๊ทธ ๋ด์ฉ๋ค์ ๋ชจ๋ ๋ค๋ฃจ๋ฉด์๋ ์ค๋ช ์ ํจ์ฌ ์ฝ๊ณ ๋ค์ํ ๊ทธ๋ฆผ์ผ๋ก ์ง๊ด์ ์ผ๋ก ์ดํดํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ ๊ฐ์์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๊ทธ๋ฆผ์ ๋ด์ฉ์ ํํ์ 2๋ฌ์ด์์ ๊ธฐ๊ฐ์ ๊ฑฐ์ณ ์ง์ ์ ๋ฆฌํ ๋ด์ฉ์ด๋ฏ๋ก, (ํด์ธ์๋ฃ ํฌํจ) ์ด๋์์๋ ์ด๋ฐ ๋ฐฉ์์ ์ค๋ช ๋ฐ ์ด๋ ๊ฒ ์์ธํ ์ค๋ช ์ ๋ณด์ค ์ ์์ ๊ฑฐ๋ผ ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฐธ๊ณ ์๋ฃ(raywenderlich์ ๋์์๊ฐ์)์์ ๋จ ํ์ค๋ก โlazy var์ ๊ด๋ จํ์ฌ๋ ์ด๋ฐ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค.โ ํ๊ณ ์ ์๋ ๋ด์ฉ์ด ์์๋ค๋ฉด, lazy var์ ๊ด๋ จ๋ ๋ชจ๋ ์ด์๋ค์ ์ฐพ์์ ์ ๊ฐ ์ง์ ์ ๋ฆฌํ๊ณ , ๊ทธ๋ฆผ์ผ๋ก ์ง๊ด์ ์ธ ์ดํด๋ฅผ ๋์ฐ๋ฉฐ ํด๊ฒฐ์ฑ ์ ์ ์ํ๊ณ ์์ต๋๋ค.
๊ทธ๋ฆผ(ํฐ ํ)์ ์ดํดํ๋ฉด ์ฝ๋๋ ์์ฃผ ์์ฝ๊ฒ ์ธ ์ ์๋ค๋ ๊ทธ๋ฐ ๋ช ์ ํ์, ์ต๋ํ ๊ทธ๋ฆผ์ ํตํ ์ดํด ๋ฐ ์ฝ๋๋ฅผ ํตํ ํ์ฉ์ผ๋ก ๋ฐธ๋ฐ์ค๋ฅผ ์ ์งํ๋ ค๊ณ ํ์๊ธฐ์ ์ฐธ๊ณ ์๋ฃ๋ค๊ณผ๋ ์์ฒญ๋ ์ฐจ์ด์ ์ด ์์ต๋๋ค. ์ฐธ๊ณ ์๋ฃ๋ค๊ณผ ๋น๊ตํ์ฌ ํจ์ฌ ์์ธํ๊ณ , ์ง๊ด์ ์ด๊ณ ํ๋ถํ ์๋ฃ, ๊ทธ๋ฆฌ๊ณ ์ผ๊ด์ฑ์๋ ์ฌ์ด ์ค๋ช ์ด ๋ช ํํ ์ฐจ๋ณ์ ์ด๋ผ๊ณ ๋ง์๋๋ฆฌ๊ณ ์ถ์ต๋๋ค.
ํด๋น ์ฃผ์ ์ ๊ด๋ จํด ์ดํด๋ฅผ ๋๊ณ ์ ์ฝ๋ ํ์ผ์ด ์ ๊ณต๋๊ณ , ์์ ๋ด์ฉ์์๋ ๋ค๋ฃจ๊ณ ์์ต๋๋ค. ์ ๊ณต๋๊ณ ์๋ ์ฝ๋๋ ๋ผ์ด์ผ์ค๊ฐ ํ๋ฝํ๋ ๋ฒ์๋ด์์ ๋๋ถ๋ถ ๋ ์ด์ฌ๋๋ฆฌ์น(raywenderlich)์ GCD๋์์ ๊ฐ์์์ ์ ๊ณต๋๋ ์ฝ๋์ ๋๋ถ๋ถ์ ์ฑํํ๊ณ ์์ผ๋ฉฐ(์ฑํ๋ถ๋ถ์ ๋ช ์๋์ด ์์) ๋ผ์ด์ผ์ค๊ฐ ํ๋ฝ๋์ง ์๋ ๋ถ๋ถ(๋ ์ด์ฌ๋๋ฆฌ์น ์์ ์์ ์ ๊ณตํ๋ ์ฝ๋)์ ๋ํด์๋ ์ฝ๋๋ฅผ ์ ๊ฐ ์ง์ ์์ฑํ๊ณ , ํฐ ํ์์ ํต์ฌ์ ์ธ ๋ถ๋ถ์ ์ ์ฌํ๊ฒ ์์ฑ๋์ด ์ ๊ณต๋๊ณ ์๋ ์ฝ๋์ ๋ํ ์ ๋ขฐ์ฑ์ ํ๋ณดํ๊ณ ์ ํ์์ต๋๋ค.
๋ํ, ์ ๊ณตํด ๋๋ฆฌ๋ ์ฝ๋์ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ์์๋ฐฐ์น๋ฅผ ๋ฐ๊พธ๊ณ , ๋ ์์ธํ ์ค๋ช ์ ์ํ ์ฝ๋๋ค๋ ๋ค์ ์ถ๊ฐํด ๋ค์ํ ์์์ ํจ๊ป ๋ณธ ์์ ๋ด์ฉ์ ์ดํด๋ฅผ ๋๊ณ ์์ต๋๋ค.
๋จ์ผ์ฃผ์ ์ ๋ํด ์กฐ๊ธ์ ๋์ ๊ฐ๊ฒฉ์ผ๋ก ์ธก์ ์ด ๋์ด์์ด ์์ํด ํ์ค ์ ์์ผ๋ ์ ๋ง ๋ง์ ๋ด์ฉ์ด ๋ด๊ฒจ์ ธ ์์ด ๊ฐ๊ฒฉ ๋๋น ํจ์ฌ ๋์ ๋ง์กฑ๊ฐ์ ์ป์ผ์ค ๊ฒ์์ ๋ง์๋๋ฆฌ๊ณ ์ถ์ต๋๋ค. ๋ณธ ๋ด์ฉ์ ์ค๋ช ํ๊ธฐ ์ํด ์ง์ ์์ฑํ PDF์๋ฃ๊ฐ GCD ๊ด๋ จ 287์ฅ, Operation ๊ด๋ จ 89์ฅ์ผ๋ก ์ด 376ํ์ด์ง์ ์๋ฃ๊ฐ ์ ๊ณต๋ฉ๋๋ค. (์ค์ ์ ๊ฐ ๋์์ ๊ฐ์ ๋ด์์ ์ค๋ช ํ๊ธฐ ์ํ ์๋ฃ๋ ์ฝ๋ ์ ์ธ PPT 830์ฅ ์ ๋๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.)
GCD/Operation๊ณผ ๊ด๋ จํด ํด์ธ์๋ฃ์์ ์ฐพ์ ์ ์๋ ๊ฑฐ์ ๋ชจ๋ ๋ด์ฉ์ ๋ชจ๋ ๋ค๋ฃจ๊ณ ์์ผ๋ฉฐ, ๋ณธ ์์ ๋ด์ฉ์ ํฌํจ๋์ด ์๋ ๋๋ถ๋ถ์ ๊ทธ๋ฆผ ๋ฐ ๋ํ๋ ์ ๊ฐ ์ง์ ์์ฑํ ๋ด์ฉ์ ๋๋ค. ๋ณธ ๊ฐ์๋ฅผ ์ํด ์๋นํ ๋ง์ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ๋ค์ด๊ฐ๊ณ , ๊ทธ๋งํผ ํฅํ ๊ฐ๋ฐ์์ ์ฑ์ฅ๊ณผ ๊ด๋ จํ์ฌ ์ค์ํ ์ฃผ์ ๋ผ๊ณ ์๊ฐํ๊ธฐ์, (์ ๊ฐ์ธ์ ์ธ ๊ด์ ์์) โ์ด๋ฐ ์๋ฃ, ์ด๋ฐ ๊ฐ์๊ฐ ์์์ผ๋ฉด ์ข๊ฒ ๋คโ ๋ผ๋ ๊ธฐ์ค์์ ๊ธฐํํ์ฌ ๋ง๋ค์ด์ง ๊ฐ์์ ๋๋ค.
๋ ๊ฐ์ธ์ ์ผ๋ก ์๊ฐํ๊ธฐ์, ๋น์ฉ์ ๋ด๊ณ ๊ฐ์ ๋ฃ๋ ๊ฒฐ์ ์ ํ๋ค๋ ๊ฒ์ ์๊ฐ๊ณผ ๋น์ฉ์ ๊ตํํ๋ ์ผ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋น์ฉ ๋๋น ํด๋น ์ฃผ์ ์ ๋ํ ๊ณต๋ถ ์๊ฐ์ ์๋ผ์๋ ๋ฐ๋ ์ถฉ๋ถํ ์ญํ ์ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉฐ, ์๊ฐ์ ์๋ผ์๊ณ ๋ ๋์ ๋ง์กฑ์ ์ป์ด๊ฐ์๊ธธ ํ๋ ๋ฐ๋จ์ ๋๋ค. ๊ฐ๊ฒฉ๋ณด๋ค ๋ ๋์ ๋ง์กฑ์ ๋๋ฆฌ๊ธฐ์ ์ถฉ์คํ ๋ด์ฉ์ผ๋ก ๋ณด๋ตํ๋๋ก ํ๊ฒ ์ผ๋ฉฐ, ์ด๋ฌํ ์ ์ ๊ฐ์ํด์ฃผ์๊ธธ ์ ์คํ ๋ถํ๋๋ฆฌ๊ฒ ์ต๋๋ค. ^^
๋ณธ ๊ฐ์์ ๋ด์ฉ๋ค์, ์ ๊ฐ ์กฐ๊ธ์ด๋ผ๋ ๊ทธ๋ฆผ ๋ฑ์ ์ฐธ๊ณ ํ ๊ฒฝ์ฐ์ PDF์ ๊ด๋ จ URL์ฃผ์๊ฐ ๋จ๊ฒจ์ ธ ์์ต๋๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ ๋ชจ๋ ์๋ฃ๋ ์ ๊ฐ ์์ฑํ ์๋ฃ์ด๊ธฐ์, ๋ถ๋ถ๋ณ๋ก ๊ฐ์์ ์ค๋ช ๋ฐฉ์์ ์ฐธ๊ณ ํ์ฌ ๋ธ๋ก๊ทธ ๋ฑ์ ์ ๋ฆฌํ์ค ๋๋ ๋ณธ ๊ฐ์์ ์ฃผ์๋ฅผ ๋จ๊ฒจ์ฃผ์๊ธธ ์ ์คํ๊ฒ ๋ถํ๋๋ฆฝ๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ , ๋ณธ ๊ฐ์์ ์ ๋ฐ์ ์ธ ๋ด์ฉ์ ๋ธ๋ก๊ทธ์ ๋ค ๋ด๋ ๊ฒ๊ณผ ๊ฐ์์๋ฃ๋ก ์ฐ์ด๋ PDFํ์ผ์ ๊ณต์ ๋ ์ด๋ ํ ๊ฒฝ์ฐ์๋ ๊ธ์ง๋ฉ๋๋ค.
์๊ฐ์ ๊ฒฐ์ ํ์๊ธฐ ์ ์, ๊ฐ์ ์คํ์ผ๊ณผ ๊ด๋ จํ์ฌ ๋ฏธ๋ฆฌ ํ์ธํด ๋ณด์ค ์ ์๋๋ก ํ์์ต๋๋ค.
๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ์ ๊ณต๋๋ ๊ฐ์๋ค์ ์ดํด๋ณด์๊ณ ์๊ฐ์ ๊ฒฐ์ ํ์๋ฉด ๋ฉ๋๋ค. :)
ํ์ต ๋์์
๋๊ตฌ์ผ๊น์?
Swift์ธ์ด๋ฅผ ์กฐ๊ธ ์ตํ์ ๋ถ
iOS์์ ๋๊ธฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ตํ์๊ณ ์ถ์ผ์ ๋ถ
GCD(Grand Central Dispatch)๋์คํจ์นํ์ ๊ฐ๋ ์ ๋ํด ์๊ณ ์ถ์ผ์ ๋ถ
๋์คํจ์น ๊ทธ๋ฃน์ ๋ํด ์๊ณ ์ถ์ผ์ ๋ถ
Operation(์คํผ๋ ์ด์ )/OperationQueue(์คํผ๋ ์ด์ ํ)์ ๋ํด ์๊ณ ์ถ์ผ์ ๋ถ
Thread-safety๊ฐ๋ ์ ๋ํด ์๊ณ ์ถ์ผ์ ๋ถ
์ด ~ ์ค๊ธ iOS๊ฐ๋ฐ์
์ ์ ์ง์,
ํ์ํ ๊น์?
Swift์ธ์ด์ ๋ํ ์ดํด
iOSํ๋ก๊ทธ๋๋ฐ์ ๋ํ ์ดํด
6,993
๋ช
์๊ฐ์
635
๊ฐ
์๊ฐํ
278
๊ฐ
๋ต๋ณ
5.0
์
๊ฐ์ ํ์
7
๊ฐ
๊ฐ์
iOS๊ฐ๋ฐ์ ์จ๋ฐ์
๋๋ค.
https://www.youtube.com/@allen_ios
์ ๊ฐ ๊ณต๋ถํ๋ฉด์ ๊ฒช์๋ ์ํ์ฐฉ์ค๋ฅผ ์ฝ๊ฒ ํ์ด๋ด์ด
์ง์์ ๊ณต์ ํ ์์๋ ๊ฐ๋ฐ์๊ฐ ๋๊ณ ์ถ์ต๋๋ค.
์ฌ์ด ์ฃผ์ ๋ก ๋น ๋ฅธ ์๊ฐ ์์ ๊ฒํฅ๊ธฐ ์์ผ๋ก ์ฝ๊ฒ๋ง ๊ฐ๋ฅด์น๋ ๊ฐ์๋ฅผ ๋ง๋๋ ๊ฒ์๋ ๊ด์ฌ์ด ์์ต๋๋ค.
๊ทธ๋ฐ ๊ฐ์๋ ์ผ๋ง๋ ์ง ๋น ๋ฅด๊ฒ ์ฐ์ด๋ด๋ฏ ๋ง๋ค ์ ์๊ฒ ์ง๋ง, ๊ฒฐ๊ตญ "์ข์ ๊ฐ๋ฐ์๋ก ์ฑ์ฅ"ํ๋ ๊ฒ์ ๊ทธ๋งํผ ์ด๋ก ์ ์ธ ๊ธฐ๋ฐ์ ๋ฐ๊ฑฐ๋ฆ์ด ํํํด์ผ ํ๋ค๊ณ ๋ฏฟ๊ณ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ฌ์ด ๊ฐ์๋ณด๋ค๋, ์ข์ ๊ฐ๋ฐ์(๋์์์ด ์ฑ์ฅํ ์ ์๋ ๊ฐ๋ฐ์)๊ฐ ๋๊ธฐ ์ํด
๋ฐ๋์ ์์์ผ ํ๋ ์ด๋ ค์ด ๋ด์ฉ๊น์ง๋ฅผ ์ต๋ํ ์ฝ๊ฒ, ๊ทธ๋ฆฌ๊ณ ์ง๊ด์ ์ผ๋ก ์๋ ค๋๋ฆฌ๋ ๊ฒ.
๊ทธ๋์ ์ ๊ฐ ์๋ ์ฌ๋ฌ๋ถ ์ค์ค๋ก ๊ณ ๋ฏผ/์๊ฐํ ์ ์๋ ๋ฐ๊ฑฐ๋ฆ์ ๋ง๋ค์ด ๋๋ฆฌ๋ ๊ฒ์ ์ ์ ๊ฐ์ ๋ชฉํ๋ก ์ผ๊ณ ์์ต๋๋ค.
์ ์ค์ค๋ก๋ ๋ด์ผ์ ๋ ์ข์ ๊ฐ๋ฐ์๊ฐ ๋์๋ ๋ชจํ ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋งํผ
์ ๊ฐ ๊ณ ๋ฏผ ํ๋ ๋ด์ฉ๋ค์ ๊น์ด์๊ฒ ์ ๋ฌ ๋๋ฆฌ๊ณ ์ถ์ต๋๋ค.
๐๐ป๋ฌธ์๋ ์๋์ ์ด๋ฉ์ผ๋ก ์ฃผ์๋ฉด ๋ฉ๋๋ค.
we.love.code.allen@gmail.com
์ธ์ด: Swift(์ค์ํํธ), Python, Java, C#
์ ์ฒด
32๊ฐ โ (8์๊ฐ 9๋ถ)
ํด๋น ๊ฐ์์์ ์ ๊ณต: