๐๐ปโโ๏ธ ์๊ฐ ์ง๋จํ
์์
ํ์๋ ์๋์ ๊ฐ๋
๋ค์ ๋ํด ๋ช
ํํ ์๊ณ , ์ดํดํ์ค ์ ์์ต๋๋ค.
- ๋์คํจ์นํ์ ๊ฐ๋
์ ๋ํด์ ๋ช
ํํ ์ดํดํ๊ณ ์๋ค. (Yes/No)
- ๋์คํจ์นํ์ ์ข
๋ฅ์ ์๋น์คํ์ง(Qos)์ ๋ํ ์ดํด๋ฅผ ํ๊ณ ์๋ค. (Yes/No)
- ๋๋ถ๋ถ์ ๊ฒฝ์ฐ Sync๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๋ ์ด์ ๋ฅผ ์๊ณ ์๊ณ , ๋ฐ๋์ Sync๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผํ๋ ๊ฒฝ์ฐ์ ๋ํด ์ฐจ์ด์ ์ ์ดํดํ๊ณ ์๋ค. (Yes/No)
- ๋์คํจ์น ๊ทธ๋ฃน์ ๊ฐ๋
์ ๋ํด ์๊ณ ์๋ค. (Yes/No)
- ๋์คํจ์น ๊ทธ๋ฃน์์ ๋น๋๊ธฐํจ์๋ฅผ ๋ค๋ฃฐ ๋ ์ฃผ์ํด์ผํ ์ ์ ๋ํด์ ์๊ณ ์๋ค. (Yes/No)
- ๋์คํจ์น ์ํฌ ์์ดํ
์ ๊ฐ๋
์ ์๊ณ ์๊ณ , ์ ์ฌ์ฉํ๋์ง ์๋ค. (Yes/No)
- ๋์คํจ์น ์ธ๋งํฌ์ด(Semaphore)์ ๊ฐ๋
์ ์๊ณ ์๊ณ , ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์๋ค. (Yes/No)
- ๊ฐ์ฒด๋ฅผ ์ค๊ณํ ๋, ์ฌ๋ฌ๊ฐ์ ์ฐ๋ ๋๊ฐ ์ ๊ทผํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ๋ํด ์ฃผ์ํด์ผํ ์ ์ ๋ช
ํํ ์ดํดํ๊ณ ์ฌ๋ฐ๋ฅธ ๊ฐ์ฒด๋ฅผ ์ค๊ณํ ์ ์๋ค. (Yes/No)
- ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ๋ ํ
์ด๋ธ๋ทฐ/์ปฌ๋ ์
๋ทฐ ํ์
์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋, ๋น๋๊ธฐ๊ฐ๋
์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฃผ์ํด์ผํ ์ ์ ๋ช
ํํ ์๊ณ ์๋ค. (Yes/No)
- ๋์คํจ์นํ๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ (์ฌ๋ฌ์ฐ๋ ๋๊ฐ ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋), ํนํ ๊ฒฝ์์ํฉ(Race Condition)์ ๋ํด ๋ช
ํํ ์ดํดํ๊ณ ์๊ณ , TSan์ฌ์ฉ๋ฒ(Thread Sanitizer Tool)์ ์๊ณ ์๋ค. (Yes/No)
- Thread-safeํ ์ฝ๋์ ์์ฑ๋ฒ์ ๋ํด ๋ช
ํํ๊ฒ ์ดํดํ๊ณ ์๋ค. (Yes/No)
- ๋์คํจ์นํ์์ ํ์ฅ๋ ์คํผ๋ ์ด์
(Operation)์ ๊ฐ๋
, ๊ทธ๋ฆฌ๊ณ ์ฐจ์ด์ ์ ๋ํด ์๊ณ ์๋ค. (Yes/No)
- ์ด๋ค ๊ฒฝ์ฐ์ ๋์คํจ์นํ๊ฐ ์๋ ์คํผ๋ ์ด์
ํ๋ฅผ ์ฌ์ฉํด์ผํ๋์ง์ ๋ํด ๊ตฌ๋ถํ์ฌ ์ฌ์ฉํ ์ ์๋ค. (Yes/No)
- ๋น๋๊ธฐํจ์๋ฅผ ๋ค๋ฃฐ ์ ์๋, ๋น๋๊ธฐ์คํผ๋ ์ด์
(AsyncOperation)์ ์ฝ๋์ ๋ํด ์ดํดํ๊ณ ์๋ค. (Yes/No)
- ์คํผ๋ ์ด์
์ ์ฃผ์ ๊ธฐ๋ฅ(์์
์ ์์ ์ค์ , ์ทจ์)์ ์์ ์์ฌ๋ก ์ฌ์ฉํ ์ ์๋ค. (Yes/No)
๐ ๊ฐ์๋ชฉ์ฐจ
(ํฌ๊ฒ GCD์ Operation๋ถ๋ถ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. GCD์ ๋ํด ์ ์ดํดํ๊ณ ๊ณ์๋๋ผ๋, GCD์์ ๋ฐ์ ๋ ๊ฐ๋
์ธ Operation(์์
ํด๋์ค)์ ๋ํด์๋ ์์ํ์ค ์๋ ์์ต๋๋ค. ์ด๋ค ๋ธ๋ก๊ทธ๋ ๊ฐ์๋ณด๋ค ๋ ๋ช
ํํ๊ณ ์ฝ๊ฒ, ๊ฐ์ ํ ๋ฒ์ ๋ชจ๋ ๊ฒ์ ์ดํดํ์ค ์ ์๋๋ก ๊ตฌ์ฑํ์ต๋๋ค.)
๐ผ๏ธ ๊ทธ๋ฆผ์ค๋ช
๋ฐฉ์์ ์์
(์์
์์ ์ฐ์ด๋ ๋ค์ํ ๊ทธ๋ฆผ ๋ฐ ๋ํ ์ค๋ช
๋ฐฉ์์ ์์์
๋๋ค.)
๐ ๊ฐ์์์ ์ ๊ณต๋๋ ์๋ฃ
์๋์ ์ฌ๋ฌ๊ฐ์ง ์๋ฃ๊ฐ ์ ๊ณต๋ฉ๋๋ค.
- GCD ๊ด๋ จ ์ ๋ฆฌ PDF - 287์ฅ
- Operation ๊ด๋ จ ์ ๋ฆฌ PDF - 89์ฅ
- GCD ๊ด๋ จ ์ค๋ช
์ ์ํ ์ฝ๋(ํ๋ ์ด๊ทธ๋ผ์ด๋ ํ์ผ) - 19ํ์ด์ง(์์คํ์ผ ์ ์ธ)
- Operation ๊ด๋ จ ์ค๋ช
์ ์ํ ์ฝ๋(ํ๋ ์ด๊ทธ๋ผ์ด๋ ํ์ผ) - 8ํ์ด์ง(์์คํ์ผ ์ ์ธ)
- iOS ํ๋ก์ ํธ ํ์ผ - 8๊ฐ
- ์ฐธ๊ณ ์ํฐํด(2๊ฐ)์ ๋ํ ํด์๋ณธ
(์์ ํด๋ ์์ ์๋ฃ๋ค์ด ๋ชจ๋ ์ ๊ณต๋ฉ๋๋ค.)
๐ ๊ฐ์ ์ ์์ ์ฐธ๊ณ ๋ ์๋ฃ
์๋์ ์๋ฃ๋ค์ ์ฐธ๊ณ ํ์์ง๋ง, ๊ทธ๋ฆผ ์ค๋ช
๋ฐฉ์์ ๋ชจ๋ ์ง์ ์ค๊ณํ์์ต๋๋ค.
- ๋์์๊ฐ์(iOS Concurrency with GCD and Operations) - ๋ ์ด์ฌ๋๋ฆฌ์น(raywenderlich) https://www.raywenderlich.com/3648-ios-concurrency-with-gcd-and-operations
- ์์ (Concurrency by Tutorials) - ๋ ์ด์ฌ๋๋ฆฌ์น(raywenderlich) https://store.raywenderlich.com/products/concurrency-by-tutorials
- ์ํฐํด(Operation and OperationQueue Tutorial in Swift) - ๋ ์ด์ฌ๋๋ฆฌ์น(raywenderlich) https://www.raywenderlich.com/5293-operation-and-operationqueue-tutorial-in-swift
- ์ํฐํด(The thread safety of lazy variables in Swift) https://medium.com/what-i-talk-about-when-i-talk-about-ios-developmen/the-thread-safet y-of-lazy-variables-in-swift-b20184ef5a38
๐๐ปโโ๏ธ ๊ฐ์ ๋ด์ฉ์ด <๊ฐ์ ์ ์ ์ฐธ๊ณ ์๋ฃ>์ ๋ง์ ์ฐจ์ด๊ฐ ์๋์?
์ ๋ง ๋ง์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
์์ ์ฐธ๊ณ ์๋ฃ๋ค๋ง์ผ๋ก ๋จ์ํ ๋ฒ์ญ ์์ค์ ๊ฐ์๋ฅผ ๋ง๋ค๋ ค๊ณ ํ๋ค๋ฉด ์ด๋ฐ ๊ฐ์๋ฅผ ๊ธฐํํ์ง ์์์ ๊ฒ์
๋๋ค. ์ด ์ฃผ์ ๋ค์ ๋ํด์ ํจ์จ์ ์ด๋ฉด์ ํจ๊ณผ์ ์ธ ์ค๋ช
, ์ง์ ์ ์ธ ๊ทธ๋ฆผ, ๋ํ ๋ฑ์ ์ง์ ๋ค ์์ PPT๋ก ์์ฑํ์ฌ์, ์ค์ ์ฐ๋ ๋๊ฐ ์ด๋ป๊ฒ ๋์ํ๊ณ ์๋์ง์ ๋ํ ์ง๊ด์ ์ธ ์ดํด๋ฅผ ๋๊ณ ์ ์ต์ ์ ์ค๋ช
๋ฐฉ๋ฒ์ ํํ์ต๋๋ค. ์์์๋ ๋ง์๋๋ ธ์ง๋ง ์ฐธ๊ณ ์๋ฃ๋ฅผ 10๋ฒ ์ด์์ฉ ๋ณด์๊ณ ๊ทธ ๋ด์ฉ๋ค์ ๋ชจ๋ ๋ค๋ฃจ๋ฉด์๋ ์ค๋ช
์ ํจ์ฌ ์ฝ๊ณ ๋ค์ํ ๊ทธ๋ฆผ์ผ๋ก ์ง๊ด์ ์ผ๋ก ์ดํดํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ ๊ฐ์์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๊ทธ๋ฆผ์ ๋ด์ฉ์ ํํ์ 2๋ฌ์ด์์ ๊ธฐ๊ฐ์ ๊ฑฐ์ณ ์ง์ ์ ๋ฆฌํ ๋ด์ฉ์ด๋ฏ๋ก, (ํด์ธ์๋ฃ ํฌํจ) ์ด๋์์๋ ์ด๋ฐ ๋ฐฉ์์ ์ค๋ช
๋ฐ ์ด๋ ๊ฒ ์์ธํ ์ค๋ช
์ ๋ณด์ค ์ ์์ ๊ฑฐ๋ผ ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฐธ๊ณ ์๋ฃ(raywenderlich์ ๋์์๊ฐ์)์์ ๋จ ํ์ค๋ก โlazy var์ ๊ด๋ จํ์ฌ๋ ์ด๋ฐ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค.โ ํ๊ณ ์ ์๋ ๋ด์ฉ์ด ์์๋ค๋ฉด, lazy var์ ๊ด๋ จ๋ ๋ชจ๋ ์ด์๋ค์ ์ฐพ์์ ์ ๊ฐ ์ง์ ์ ๋ฆฌํ๊ณ , ๊ทธ๋ฆผ์ผ๋ก ์ง๊ด์ ์ธ ์ดํด๋ฅผ ๋์ฐ๋ฉฐ ํด๊ฒฐ์ฑ
์ ์ ์ํ๊ณ ์์ต๋๋ค.
๊ทธ๋ฆผ(ํฐ ํ)์ ์ดํดํ๋ฉด ์ฝ๋๋ ์์ฃผ ์์ฝ๊ฒ ์ธ ์ ์๋ค๋ ๊ทธ๋ฐ ๋ช
์ ํ์, ์ต๋ํ ๊ทธ๋ฆผ์ ํตํ ์ดํด ๋ฐ ์ฝ๋๋ฅผ ํตํ ํ์ฉ์ผ๋ก ๋ฐธ๋ฐ์ค๋ฅผ ์ ์งํ๋ ค๊ณ ํ์๊ธฐ์ ์ฐธ๊ณ ์๋ฃ๋ค๊ณผ๋ ์์ฒญ๋ ์ฐจ์ด์ ์ด ์์ต๋๋ค. ์ฐธ๊ณ ์๋ฃ๋ค๊ณผ ๋น๊ตํ์ฌ ํจ์ฌ ์์ธํ๊ณ , ์ง๊ด์ ์ด๊ณ ํ๋ถํ ์๋ฃ, ๊ทธ๋ฆฌ๊ณ ์ผ๊ด์ฑ์๋ ์ฌ์ด ์ค๋ช
์ด ๋ช
ํํ ์ฐจ๋ณ์ ์ด๋ผ๊ณ ๋ง์๋๋ฆฌ๊ณ ์ถ์ต๋๋ค.
๐ ์ ๊ณต๋๋ ์ฝ๋(code) ๊ด๋ จ
ํด๋น ์ฃผ์ ์ ๊ด๋ จํด ์ดํด๋ฅผ ๋๊ณ ์ ์ฝ๋ ํ์ผ์ด ์ ๊ณต๋๊ณ , ์์
๋ด์ฉ์์๋ ๋ค๋ฃจ๊ณ ์์ต๋๋ค. ์ ๊ณต๋๊ณ ์๋ ์ฝ๋๋ ๋ผ์ด์ผ์ค๊ฐ ํ๋ฝํ๋ ๋ฒ์๋ด์์ ๋๋ถ๋ถ ๋ ์ด์ฌ๋๋ฆฌ์น(raywenderlich)์ GCD๋์์ ๊ฐ์์์ ์ ๊ณต๋๋ ์ฝ๋์ ๋๋ถ๋ถ์ ์ฑํํ๊ณ ์์ผ๋ฉฐ(์ฑํ๋ถ๋ถ์ ๋ช
์๋์ด ์์) ๋ผ์ด์ผ์ค๊ฐ ํ๋ฝ๋์ง ์๋ ๋ถ๋ถ(๋ ์ด์ฌ๋๋ฆฌ์น ์์ ์์ ์ ๊ณตํ๋ ์ฝ๋)์ ๋ํด์๋ ์ฝ๋๋ฅผ ์ ๊ฐ ์ง์ ์์ฑํ๊ณ , ํฐ ํ์์ ํต์ฌ์ ์ธ ๋ถ๋ถ์ ์ ์ฌํ๊ฒ ์์ฑ๋์ด ์ ๊ณต๋๊ณ ์๋ ์ฝ๋์ ๋ํ ์ ๋ขฐ์ฑ์ ํ๋ณดํ๊ณ ์ ํ์์ต๋๋ค.
๋ํ, ์ ๊ณตํด ๋๋ฆฌ๋ ์ฝ๋์ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ์์๋ฐฐ์น๋ฅผ ๋ฐ๊พธ๊ณ , ๋ ์์ธํ ์ค๋ช
์ ์ํ ์ฝ๋๋ค๋ ๋ค์ ์ถ๊ฐํด ๋ค์ํ ์์์ ํจ๊ป ๋ณธ ์์
๋ด์ฉ์ ์ดํด๋ฅผ ๋๊ณ ์์ต๋๋ค.
๐ค ์์
์ ๊ฐ๊ฒฉ ์ฑ
์ ๊ด๋ จ
๋จ์ผ์ฃผ์ ์ ๋ํด ์กฐ๊ธ์ ๋์ ๊ฐ๊ฒฉ์ผ๋ก ์ธก์ ์ด ๋์ด์์ด ์์ํด ํ์ค ์ ์์ผ๋ ์ ๋ง ๋ง์ ๋ด์ฉ์ด ๋ด๊ฒจ์ ธ ์์ด ๊ฐ๊ฒฉ ๋๋น ํจ์ฌ ๋์ ๋ง์กฑ๊ฐ์ ์ป์ผ์ค ๊ฒ์์ ๋ง์๋๋ฆฌ๊ณ ์ถ์ต๋๋ค. ๋ณธ ๋ด์ฉ์ ์ค๋ช
ํ๊ธฐ ์ํด ์ง์ ์์ฑํ PDF์๋ฃ๊ฐ GCD ๊ด๋ จ 287์ฅ, Operation ๊ด๋ จ 89์ฅ์ผ๋ก ์ด 376ํ์ด์ง์ ์๋ฃ๊ฐ ์ ๊ณต๋ฉ๋๋ค. (์ค์ ์ ๊ฐ ๋์์ ๊ฐ์ ๋ด์์ ์ค๋ช
ํ๊ธฐ ์ํ ์๋ฃ๋ ์ฝ๋ ์ ์ธ PPT 830์ฅ ์ ๋๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.)
GCD/Operation๊ณผ ๊ด๋ จํด ํด์ธ์๋ฃ์์ ์ฐพ์ ์ ์๋ ๊ฑฐ์ ๋ชจ๋ ๋ด์ฉ์ ๋ชจ๋ ๋ค๋ฃจ๊ณ ์์ผ๋ฉฐ, ๋ณธ ์์
๋ด์ฉ์ ํฌํจ๋์ด ์๋ ๋๋ถ๋ถ์ ๊ทธ๋ฆผ ๋ฐ ๋ํ๋ ์ ๊ฐ ์ง์ ์์ฑํ ๋ด์ฉ์
๋๋ค. ๋ณธ ๊ฐ์๋ฅผ ์ํด ์๋นํ ๋ง์ ์๊ฐ๊ณผ ๋
ธ๋ ฅ์ด ๋ค์ด๊ฐ๊ณ , ๊ทธ๋งํผ ํฅํ ๊ฐ๋ฐ์์ ์ฑ์ฅ๊ณผ ๊ด๋ จํ์ฌ ์ค์ํ ์ฃผ์ ๋ผ๊ณ ์๊ฐํ๊ธฐ์, (์ ๊ฐ์ธ์ ์ธ ๊ด์ ์์) โ์ด๋ฐ ์๋ฃ, ์ด๋ฐ ๊ฐ์๊ฐ ์์์ผ๋ฉด ์ข๊ฒ ๋คโ ๋ผ๋ ๊ธฐ์ค์์ ๊ธฐํํ์ฌ ๋ง๋ค์ด์ง ๊ฐ์์
๋๋ค.
๋ ๊ฐ์ธ์ ์ผ๋ก ์๊ฐํ๊ธฐ์, ๋น์ฉ์ ๋ด๊ณ ๊ฐ์ ๋ฃ๋ ๊ฒฐ์ ์ ํ๋ค๋ ๊ฒ์ ์๊ฐ๊ณผ ๋น์ฉ์ ๊ตํํ๋ ์ผ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋น์ฉ ๋๋น ํด๋น ์ฃผ์ ์ ๋ํ ๊ณต๋ถ ์๊ฐ์ ์๋ผ์๋ ๋ฐ๋ ์ถฉ๋ถํ ์ญํ ์ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉฐ, ์๊ฐ์ ์๋ผ์๊ณ ๋ ๋์ ๋ง์กฑ์ ์ป์ด๊ฐ์๊ธธ ํ๋ ๋ฐ๋จ์
๋๋ค. ๊ฐ๊ฒฉ๋ณด๋ค ๋ ๋์ ๋ง์กฑ์ ๋๋ฆฌ๊ธฐ์ ์ถฉ์คํ ๋ด์ฉ์ผ๋ก ๋ณด๋ตํ๋๋ก ํ๊ฒ ์ผ๋ฉฐ, ์ด๋ฌํ ์ ์ ๊ฐ์ํด์ฃผ์๊ธธ ์ ์คํ ๋ถํ๋๋ฆฌ๊ฒ ์ต๋๋ค. ^^
๐ ๊ฐ์ ๋ด์ฉ ๋ผ์ด์ผ์ค ๊ด๋ จ
๋ณธ ๊ฐ์์ ๋ด์ฉ๋ค์, ์ ๊ฐ ์กฐ๊ธ์ด๋ผ๋ ๊ทธ๋ฆผ ๋ฑ์ ์ฐธ๊ณ ํ ๊ฒฝ์ฐ์ PDF์ ๊ด๋ จ URL์ฃผ์๊ฐ ๋จ๊ฒจ์ ธ ์์ต๋๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ ๋ชจ๋ ์๋ฃ๋ ์ ๊ฐ ์์ฑํ ์๋ฃ์ด๊ธฐ์, ๋ถ๋ถ๋ณ๋ก ๊ฐ์์ ์ค๋ช
๋ฐฉ์์ ์ฐธ๊ณ ํ์ฌ ๋ธ๋ก๊ทธ ๋ฑ์ ์ ๋ฆฌํ์ค ๋๋ ๋ณธ ๊ฐ์์ ์ฃผ์๋ฅผ ๋จ๊ฒจ์ฃผ์๊ธธ ์ ์คํ๊ฒ ๋ถํ๋๋ฆฝ๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ , ๋ณธ ๊ฐ์์ ์ ๋ฐ์ ์ธ ๋ด์ฉ์ ๋ธ๋ก๊ทธ์ ๋ค ๋ด๋ ๊ฒ๊ณผ ๊ฐ์์๋ฃ๋ก ์ฐ์ด๋ PDFํ์ผ์ ๊ณต์ ๋ ์ด๋ ํ ๊ฒฝ์ฐ์๋ ๊ธ์ง๋ฉ๋๋ค.
๐ ๊ฐ์ ๋ด์ฉ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ ๊ณต
์๊ฐ์ ๊ฒฐ์ ํ์๊ธฐ ์ ์, ๊ฐ์ ์คํ์ผ๊ณผ ๊ด๋ จํ์ฌ ๋ฏธ๋ฆฌ ํ์ธํด ๋ณด์ค ์ ์๋๋ก ํ์์ต๋๋ค.
- (์น์
0. 1.GCD/Operation์ ์์)์ ๊ด๋ จ๋ 1์๊ฐ ๊ฐ๋์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
- (์น์
10. 1. Operation์ ์์)์ ๊ด๋ จ๋ 5๋ถ ๊ฐ๋์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ์ ๊ณต๋๋ ๊ฐ์๋ค์ ์ดํด๋ณด์๊ณ ์๊ฐ์ ๊ฒฐ์ ํ์๋ฉด ๋ฉ๋๋ค. :)