๋์์ฑ์ ์ด์ ํ๋ก๊ทธ๋๋ฐ์์ ๋นผ๋์ ์ ์๋ ์์๊ฐ ๋์๋ค. ํญ์ ๋์์ฑ๊ณผ ๊ฐ์ด ๋์ค๋ ๋ณ๋ ฌ์ฑ์ ๋ฌด์์ด ๋ค๋ฅผ๊น? ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์์๊น? iOS ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๋๋ ์ด๋ค ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์์๊น? ๋ค์ํ ๊ฒ๋ค์ ๋ํด ์์๋ณด๊ธฐ ์ด์ ์, iOS์์์ Thread์ ๋ํด ์์๋ณด์.
ํด๋น ๊ธ์ ์ฌ๋ด ๋ฐํ์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ต๋๋ค.
Concurrency
๋์์ ์ผ์ด๋๋ ์ฌ๋ฌ๊ฐ์ง ์ผ
์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ๋ถ๋ถ์ ๋์์ ์คํ ๊ฐ๋ฅํ๋๋ก ํ๋ค. ํ์ง๋ง! ์ด๋ ๋ ผ๋ฆฌ์ ์ธ ๊ฐ๋ ์ด๋ค. ์ฆ, ๋์์ ์ฒ๋ฆฌ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํ๋ค๋ ๊ฒ. ๊ทธ๋ผ ์ ๋ง ๋ณ๋ ฌ๋ก ์ผ์ด๋๋ ํ์๋ฅผ ๋ญ๋ผ๊ณ ๋ถ๋ฅผ๊น? ์ด๋ฏธ ์๊ณ ์๋ค. Parallelism ์ด๋ผ ํ๋ค. ๋ฉํฐ์ฝ์ด ํ๊ฒฝ์์๋ ์ ๋ง ๋ณ๋ ฌ๋ก ์คํ๋ ์๋ ์์ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ํต์ฌ์ ๋ฉด์ ๊ด ์์ ๊ด๊ณ์์ด, ๋ฉด์ ์๋ค์ ์ฌ๋ฌ์ค๋ก ๋๋์ด์ ๋ฉด์ ์ฅ์ ๋ค์ฌ๋ณด๋๋ค๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ๋ฉด์ ๊ด์ ์ค์ ๋ฌผ๋ฆฌ ์ค๋ ๋๋ผ๊ณ ์๊ฐํ ์ ์๊ณ , ์ค์ ์ธ์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋์์ฑ์ ๋ง์กฑํ๋๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ์์ด๋ผ ์๊ฐํ ์ ์๋ค.
Thread
- ์ฝ๋์ ๋ํ ๋ณ๋์ ์์ ํ๋ฆ
- iOS ์ ๊ณต Thread
- Cocoa Thread
- POSIX Thread
Thread Class ์ฌ์ฉํ์ฌ ๋ง๋ค๊ธฐ
๋๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๋จผ์ , ์ด๋ ๊ฒ closure๋ก ์คํํ๊ณ ์ถ์ ๊ตฌ๋ฌธ ์์ฒด๋ฅผ ๋๊ฒจ์ ์ฒ๋ฆฌํ ์ ์๋ค.
๋๋ฒ์งธ๋ก๋ Class๋ฅผ ๋ง๋ค๊ณ , ์ค๋ ๋ ๋ง๋๋ ์ฝ๋ ์์ฑํ, ๋์ํ๊ณ ์ถ์ ํจ์๋ฅผ ๋๊ฒจ์ ์ฒ๋ฆฌํ ์ ์๋ค. ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ์ค๋ ๋์ ๋ฆฌ์์ค๋ ์ค๋ ๋๊ฐ ์ข ๋ฃ๋๋ ์์ ์ ์์คํ ์ ์ํด ์๋์ผ๋ก ํ์๋๋ค.
NSObject๋ฅผ ์ฌ์ฉํ์ฌ Thread ๋ง๋ค๊ธฐ
performSelector
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ ์๋ ์๋ค. ์ง์ ํ ๋ฉ์๋๋ main thread ์์์ ์คํ๋๊ฒ ๋๋ค.
Thread๋ก๋ถํฐ ๋ฉ์ด์ง์.
ํ์ง๋ง iOS์์๋ ์ด๋ ๊ฒ ์ง์ ์ค๋ ๋๋ฅผ ๋ง๋ค์ด์ ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์๋๋ค.
- ์์ฉ ํ๋ก๊ทธ๋จ์ ์ค๋ ๋ ์๋ ํ์ฌ ์์คํ ๋ก๋ ๋ฐ ํ๋์จ์ด์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋ ์ ์๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ํ๋๋ ์์ ๋๋, ๋ณํํ๋ ์์คํ ์ํ์ ๋ง๊ฒ ๋์ ์ผ๋ก ํ์ฅ๊ฐ๋ฅํด์ผ ํจ
์ฆ, ์์คํ ์ํ๊ฐ ๋ฐ๋์ ๋ฐ๋ผ ์ดํ๋ฆฌ์ผ์ด์ ์ด ๋์ ์ผ๋ก ์ค๋ ๋์ ์ซ์๋ฅผ ๊ฒฐ์ ํด์ผ ํ๋ค๋ ๋ง. ์ ์ ํ ์ค๋ ๋ ์๋ฅผ ์๋ค๊ณ ํ๋๋ผ๋, ๋ง์ ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ ํ๋ง(์ฌ์ฉํ ์ค๋ ๋ ๊ฐ์ฒด๋ฅผ ์ค๋ ๋ ํ์ ์ ์ฅํด๋์๋ค๊ฐ ๋ค์ ๊บผ๋ด์ฐ๋ ๊ฐ๋ )ํด์ผ ํ๋ค. ์ด๋ฐ ๋ถ๋ถ์ ๊ด๋ฆฌ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ด๋ ต๋ค. ์ฆ ์ค๋ ๋ ๊ด๋ฆฌ ๋ถ๋ด์ ์ ธ์ผํ๋ค๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ด๋ฌํ ๋ถ๋ถ์์ ์ฌ๋ฐ๋ฅธ ์ค๋ ๋ฉ ์๋ฃจ์ ์ ๊ตฌํํ๋ ๊ฒ์ด ๋งค์ฐ ์ด๋ ต๋ค. ๊ทธ๋์ iOS๋ ์ค๋ ๋์ ์์กดํ๋ ๋์ , ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋น๋๊ธฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ฑํํ๋ค. ์ฆ, ๋น๋๊ธฐ์ ์ผ๋ก ํ๋ก๊ทธ๋๋จธ๋ ํจ์๋ฅผ ํธ์ถํ๊ณ , ๋ด๋ถ์ ์ผ๋ก ์ค๋ ๋ ํ์์ ์ค๋ ๋๋ฅผ ๊ฐ์ ธ์์ ์์ ํ ํ, ์์ ์ด ๋๋ ํ์ Callback์ผ๋ก ํธ์ถ์์๊ฒ ๊ฒฐ๊ณผ๋ฅผ ๋์ ธ์ฃผ๋ ๋ฐฉ์์ด๋ค.
์ด๋ฅผ ํตํด, ์ค๋ ๋๋ฅผ ์ง์ ๊ด๋ฆฌํ์ง ์๊ณ ๋ ๋ชจ๋ ์์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ํํ ์ ์๋ ๊ธฐ์ ์ ์ ๊ณตํ๋ค.
- Grand Central Dispatch(GCD)
- Operation Queue
์ ๋ฆฌ
- concurrency์ parallelism์ ๋ค๋ฅด๋ค. ๋ ผ๋ฆฌ์ , ๋ฌผ๋ฆฌ์ ๊ตฌ๋ถ์ด ์๋ค.
- Thread๋ฅผ ๋ง๋ค์ด์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ํ์ง ์๋๋ค.
- Thread ๊ด๋ฆฌ๊ฐ ์๋นํ ๋ณต์กํ๊ณ ๋ฌธ์ ์์ง๊ฐ ๋ง๊ธฐ ๋๋ฌธ. ๊ทธ๋์ Apple์ด ์ ๊ณตํ๋ GCD, Operation Queue๊ฐ ์๋ค.
๋ค์ ๊ธ์์๋ GCD์ ๋ํด์ ์์๋ณด๋๋ก ํ์.