๋ณธ ๊ฒ์๋ฌผ์ ์จ๋ฐ์ ์ธํ๋ฐ ๊ฐ์๋ฅผ ๋ฃ๊ณ ์์ฑํ ๊ธ ์ ๋๋ค.
๋คํธ์ํฌ ํต์ ์ ์ํด ๋น๋๊ธฐ๋ฅผ ์ ํ๊ณ ์ฌ์ฉํ์์ง๋ง ์๋ฆฌ๋ฅผ ์ ๋๋ก ํ์ ํ์ง ๋ชปํ๊ณ ์ฝ๋๋ง ๋ณต์ฌํด์ ๋์ํ๋ ๋๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋น๋๊ธฐ์ ๋ํ ๋๋ ค์์ ์์ ๊ธฐ ์ํด ๋ณธ ๊ฐ์๋ฅผ ์๊ฐํ๊ธฐ๋ก ๊ฒฐ์ ํ์๋ค.
์๊ฐ์ง๋จํ๋ฅผ ์ฝ์ด๋ดค์ ๋ ๋๋ถ๋ถ ๋ด๊ฐ ์ด๋ ค์ํ๋ ๋ด์ฉ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์๊ณ , ๋ด๊ฐ ์ฌ์ฉํ๋ฉด์ ๊ถ๊ธํ๋ ๋ด์ฉ๋ค์ด ๋ง์ด ์์๋ค.
์ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ด ํ์ํ ๊น?
๋ฌด์ธ๊ฐ๋ฅผ ํ์ตํ๊ธฐ์ ์์ ์ค์ํ๊ฑด ์ด ๊ฐ๋ ์ด ์ ๋ฑ์ฅํ์๊น๋ฅผ ๊ณ ๋ฏผํด๋ณด๋ ์๊ฐ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๋ชจ๋ ๊ฐ๋ ๋ค์ ์๋ฌด ์ด์ ์์ด ๋ฑ์ฅํ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ๊ทธ ์ด์ ๋ฅผ ์๋๊ฒ์ ์์ผ๋ก์ ํ์ต ๋ด์ฉ์ ํฐ ๋ฐ๊ฑฐ๋ฆ์ด ๋์ด ์ค ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ด ๋ด๊ฒ ๋ฏ์ค๊ฒ ๋๊ปด์ก๋ ์ด์ ๊ฐ ์ด๊ฒ์ ํ์์ฑ์ ๋ชธ์ ๊นจ๋ซ์ง ๋ชปํด์๋ผ๋ ์๊ฐ๋ ๋ ๋ค. ๋ด๊ฐ ๋ค๋ฃจ๋ ๋ฐ์ดํฐ์ ์์ ๊ทธ๋ค์ง ํฌ์ง ์๊ณ ๊ฐ๋จํ ๋ฐ์ดํฐ๋ค๋ง์ ๋ค๋ฃจ์๊ธฐ ๋๋ฌธ์ ๋๊ท๋ชจ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ๋ํ๋๋ ํ์์ ๊ฒฝํํ์ง ๋ชปํ๊ณ ๊ณ ๋ฏผํ์ง ์์๋ค.
ํ ์ดํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ๊ฐ์ํํ์ ์ ๋ณด๋ฅผ ๊ฐ์ง api๋ฅผ ์ฌ์ฉํ ๊ฒฝํ์ด ์๋๋ฐ, ์ด ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์์ ํ ์ด๋ธ ๋ทฐ๋ก ๋ํ๋ด๋ ๊ณผ์ ์์ ๋ฒ๋ฒ ์์ด ์์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์๊ฐํ ๋ฐฉ๋ฒ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๋ํ๋ด๋๊ฒ์ด ์๋ ์ด๋์ ๋์ ๋ฐ์ดํฐ๋ง ๋ถ๋ฌ์ค๊ณ ์ฌ์ฉ์์ ์์ฒญ์ด ์๋ค๋ฉด ๋ค์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค. (paging)
์๋ฌดํผ ์ด์ ๊ฐ์ด ๋ฒ๋ฒ ์ด๋ ์ด์ ๋ ์ฌ๋ฌ task๋ฅผ ํ๋์ thread๋ก ์ฒ๋ฆฌํ๋ ๊ณผ์ ์์ ์๊ธฐ๋ ๊ฒ์ด๊ณ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉํ์ฌ task๋ฅผ ๋ค๋ฅธ thread์์ ๋์์ ์ผ์ ํ๊ฒ ํ๋ค.
์ด๋ task๋ฅผ ๋๊ธฐํ๋ ฌ์ ๋ณด๋ด๊ธฐ๋ง ํ๋ฉด ๋๋ค๋ ์๋ฏธ์ด๊ณ , ์ฌ๊ธฐ์ ๋๊ธฐํ๋ ฌ์ Queue๋ฅผ ์๋ฏธํ๋ค. (FIFO๋ฐฉ์ ์ฌ์ฉ)
๊ทธ ํ ์์์ OS๊ฐ task๋ฅผ ๋ค๋ฅธ thread๋ก ๋ถ์ฐ์ฒ๋ฆฌ ํ๊ฒ๋๋ค.
GCD์ Operation
์์์ ์ธ๊ธํ task๋ฅผ thread๋ก ์ฎ๊ธฐ๋ ๊ณผ์ ์์ ํ์ํ Queue๊ฐ ๋ฐ๋ก GCD์ Operation์ด๋ค.
1. ์ง์ ์ ์ผ๋ก ์ฐ๋ ๋๋ฅผ ๊ด๋ฆฌํ์ง ์๊ณ ํ(๋๊ธฐํ๋ ฌ)๋ผ๋ ๊ฐ๋ ์ ์ด์ฉํด ์์ ์ ๋ถ์ฐ์ฒ๋ฆฌํ๋ค.
2. GCD์ Operation์ ์ฌ์ฉํด ์์คํ ์์ ์์์ thread๋ฅผ ๊ด๋ฆฌํ๋ค.
* ์ง์ thread๋ฅผ ์์ฑํ์ฌ ๊ด๋ฆฌํ ์ ์์ง๋ง ์ด๋ ์๋ชป ์ฌ์ฉํ๋ฉด ์คํ๋ ค ์ฑ์ด ๋๋ ค์ง ์ ์๋ค.
3. thread๋ณด๋ค ๋ ๋์ ๋ ๋ฒจ์์ ์ผ์ ํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
4. ์ฝ๊ฒ ๋ค๋ฅธ thread์์ ์์ ๋ค์ด ๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ๋๋ก ๋ง๋ค์ด์ค๋ค.
* ์ด๋ ์์ ์ ๋ณดํต ๋คํธ์ํฌ์ ๊ด๋ จ๋๊ณ ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ด๋ค.
DispatchQueue.global().async {
//code (closure)
}
iOS๋ฅผ ์กฐ๊ธ๋ง ๊ณต๋ถํ๋ฉด ๋ณผ ์ ์๋ ์ฝ๋์ด๋ค.
์ด๋ฐ์์ผ๋ก ๊ตฌ์ฑ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค! ์ฌ๊ธฐ์ ๊ธ๋ก๋ฒ ํ๊ฐ ๊ถ๊ธํด์ก๋๋ฐ..
ํ๋ mainํ์ globalํ, privateํ(์ปค์คํ ํ)๋ก ํฌ๊ฒ ๋๋์ด์ง๋๋ฐ main ํ๋ ํ๋๋ง ์กด์ฌ, global ํ๋ ์ฌ๋ฌ๊ฐ ์กด์ฌํ ์ ์๋ค.
UI ์ฒ๋ฆฌ๋ ๊ผญ mainํ์์ ์ฒ๋ฆฌํด์ฃผ์ด์ผ ํ๋๋ฐ ๋๋ ค์ง๋ UI ์ ๋ฐ์ดํธ์ ์์ ์ global๋ก ๋ถ์ฐ์์ผ task๋ฅผ ์ฒ๋ฆฌํ๋ค.
๊ทธ๋์ mainํ์์๋ ์ค์ํ ์ผ์ ์ฒ๋ฆฌํ๊ณ global์์๋ ๋น๊ต์ ๋ ์ค์ํ ์ผ์ ์ฒ๋ฆฌํ๋ค๊ณ ์ดํดํ ์ ์๋ค.
์์ ๊ทธ๋ฆผ์์ ๋ณด๋ฉด thread1์ด mainํ, ๋๋จธ์ง thread๊ฐ globalํ๋ผ๊ณ ์ดํดํ ์ ์๋ค.
๊ธฐ์กด GCD๋ง์ ์ฌ์ฉํ์์ ๋, GCD๋ ๊ฐ๋จํ ์ผ, ํจ์๋ฅผ ์ฌ์ฉํ๋ ์์ ๋ฑ์ ์ผ์ ์ฒ๋ฆฌํ์์ง๋ง, ๋ณด๋ค ๋ณต์กํ ์ผ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด GCD์ ๊ธฐ๋ฐํ์ฌ Operation์ด ๋ฑ์ฅํ์๋ค.
Operation์ ๋ณด๋ค ๋ณต์กํ๊ณ , ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ์บก์ํํ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃจ์ด ์ทจ์, ์์์ง์ , ์ผ์์ค์ง์ ๊ฐ์ ๋ณด๋ค ๋ณต์กํ ์ผ์ ์ฒ๋ฆฌํ ์ ์๋ค.
Synchornous(๋๊ธฐ)์ Asynchronous(๋น๋๊ธฐ)
์ ์ฒซ๋ฒ์งธ ๊ทธ๋ฆผ์์ thread1์ ์๋ task๋ฅผ thread2๋ก ๋ถ์ฐํ๋ ๊ณผ์ ์์..
๋๊ธฐ๋ taskํ๋๊ฐ ๋ชจ๋ ์ผ์ ์ฒ๋ฆฌํ ๋ ๊น์ง ๊ธฐ๋ค๋ฆฐ ํ ๋ค์ task๋ฅผ ์ฒ๋ฆฌํ๋ค.
๋ฐ๋ผ์ ์์์๊ฐ์ task1 + task2 + task3 + task4 ์ด๋ค.
๋น๋๊ธฐ๋ task ํ๋๋ฅผ ๋ค๋ฅธ thread์ ๋ณด๋ด๊ณ ์ฆ์ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์ task๊ฐ ์ผ์ ์ฒ๋ฆฌํ ๋ ๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ค.
์ฆ, ๋ฉ์ธthread๊ฐ ๋ค๋ฅธ ์ผ์ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์์์๊ฐ์ ๊ต์ฅํ ์งง๋ค.
๋น๋๊ธฐ๋ผ๋ ๊ฐ๋ ์ด ์ผ๋ฐ์ ์ผ๋ก ํ์ํ ์ด์ ๋ ๋๋ถ๋ถ์ ์๋ฒ์์ ํต์ ๋๋ฌธ์ด๋ค. ๋คํธ์ํฌ์ ๊ด๋ จ๋ ์์ ๋ค์ ๋ด๋ถ์ ์ผ๋ก ๋น๋๊ธฐ์ ์ผ๋ก ๊ตฌํ๋์ด ์๋๋ฐ, ๋ง์ฝ ๋๊ธฐ๋ก ์ฒ๋ฆฌํ๋ค๋ฉด taskํ๋ํ๋๊ฐ ๋ชจ๋ ์ผ์ ์ฒ๋ฆฌํ ๋ ๊น์ง ๊ธฐ๋ค๋ ค์ผํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ๊ต์ฅํ ์ค๋ ๊ฑธ๋ฆฐ๋ค.
๋ฐ๋ผ์ ๋คํธ์ํฌ ํต์ ๊ณผ ๋น๋๊ธฐ๋ ํ์ฐ์ ์ด๋ผ ๋ณผ ์ ์๋ค.
Serial(์ง๋ ฌ)๊ณผ Concurrent(๋์)
์ง๋ ฌํ๋ ๋ฉ์ธํ์์ ๋ถ์ฐ์ฒ๋ฆฌ ์ํจ ์์ ์ ๋ค๋ฅธ ํ๊ฐ์ thread์์ ์ฒ๋ฆฌํ๋ ํ, ๋์ํ๋ ๋ฉ์ธํ์์ ๋ถ์ฐ์ฒ๋ฆฌ ์ํจ ์์ ์ ๋ค๋ฅธ ์ฌ๋ฌ๊ฐ์ thread์์ ์ฒ๋ฆฌํ๋ ํ๋ฅผ ์๋ฏธํ๋ค.
๊ทธ๋ ๋ค๋ฉด ๋์ํ๊ฐ ์ง๋ ฌํ๋ณด๋ค ๋ ์ข์๋ณด์ด๋๋ฐ ์ง๋ ฌํ๊ฐ ํ์ํ ์ด์ ๋ ๋ฌด์์ผ๊น?
์ง๋ ฌํ๋ ์์๊ฐ ์ค์ํ ์์ ์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ํ๋ ๊ฐ์ ๋ ๋ฆฝ์ ์ด์ง๋ง ์ ์ฌํ ์ฌ๋ฌ๊ฐ์ ์์ ์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ๋ค.
์ด์ ๊ฐ์ ํน์ง์ ํ์ฉํ์ฌ ์ง๋ ฌํ์ ๋์ํ๋ฅผ ์ฉ๋์ ๋ง๊ฒ ์ฌ์ฉํ๋ค.
๋ง์ง๋ง์ผ๋ก.. ๋น๋๊ธฐ๋ผ๋ ๋ง๊ณผ ๋์๋ผ๋ ๋ง์ ๊ฐ์ ๋ง์ผ๊น?
์ด ๊ฐ์๋ฅผ ๋ฃ๊ธฐ ์ ์ด๋ผ๋ฉด ๊ฐ์ ๋ง์ด๋ผ๊ณ ํ์ ์๋ ์์ ๊ฒ ๊ฐ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋์ ๋ค๋ฅธ ๋ง์ด๋ฉฐ, ๋๊ธฐ/๋น๋๊ธฐ๋ ์์ ์ ๋ณด๋ด๋ ์์์ ์์ ๊ธฐ๋ค๋ฆด์ง ๋ง์ง๋ฅผ ๋ค๋ฃจ๋ ๊ฒ ์ง๋ ฌ/๋์๋ ๋๊ธฐ์ด๋ก ๋ณด๋ด์ง ์์ ์ด ์ฌ๋ฌ๊ฐ์ thread๋ก ๊ฐ ๊ฒ์ธ์ง, ํ๊ฐ์ thread๋ก ๊ฐ ๊ฒ์ธ์ง๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ ์๋ฏธํ๋ค.