RunLoop์ด๋ ๋ฌด์์ผ๊น?
RunLoop
Run loop์ ์ผ๋จ Thread์ ๊ด๋ จ๋ ๋ ์์ด๋ค. ๊ฐ๋จํ๊ฒ ๋งํ๋ฉด, Run loop์ event๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ง๋ค์ด์ง loop์ด๋ค. Timer ๋ํ ํจ๊ป ์ฒ๋ฆฌํ๋ค. ํ์ง๋ง ์ด๋ฅผ ๋ฐ๊นฅ์์ ํ๋ฒ ๊ฐ์ผ ๊ตฌ์กฐ์ธ๋ฐ, ์ด๋ ๊ฒ ๋ง๋ ์ด์ ๋ ํ ์ผ์ด ์์ ๊ฒฝ์ฐ์๋ Thread๋ฅผ busyํ๊ฒ ๋๊ณ , ๊ทธ๋ ์ง ์์ ๋๋ sleep ํ๋๋ก ํ๊ธฐ ์ํจ์ด๋ค.
Run loop์ ๊ด๋ฆฌ๋ ์๋์ ์ผ๋ก ๋๋ ๊ฒ์ด ์๋๋ค. ์ ์ ํ ํ์ด๋ฐ์ thread code๋ฅผ ์์ํ๋๋ก ํด์ผํ๊ณ , ๋ค์ด์ค๋ ์ด๋ฒคํธ์ ๋ง์ถ์ด์ ๋ฐ์ํ๋๋ก ์ค๊ณํด์ผ ํ๋ค. Cocoa, Core Foundation์์๋ ๋ด๊ฐ ๋ง๋ค๊ณ ์ถ์ thread์ run loop์ ์ฝ๊ฒ ์ค์ ํ๊ธฐ ์ํด run loop ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๋ค. ์ฆ, ๋ช ์์ ์ผ๋ก ์์ฑํด์ ์ฌ์ฉํ ํ์๊ฐ ์๋ค. ๊ฐ๊ฐ์ thread (main ํฌํจ)์๋ ๊ฐ๊ฐ์ run loop object๋ฅผ ๊ฐ์ง๊ณ ์๋ค. main thread์ ๊ฒฝ์ฐ์๋ run loop์ด ๊ณ์ ๋๊ณ ์์ด์ runํ ํ์๊ฐ ์์ง๋ง, ๋ฐ๋ก ๋ง๋ thread์ ๊ฒฝ์ฐ์๋ ๋ด๊ฐ ์ง์ ์คํํด์ฃผ์ด์ผ ํ๋ค.
์ฆ, ์ ๋ฆฌํ๋ฉด
- Run Loop์ Thread๋ง๋ค ๊ฐ๊ฐ ์๋ค.
- Main Thread์ Run Loop์ ์๋์ ์ผ๋ก ๋์๊ฐ๋ค.
- ๋ค๋ฅธ Thread๋ ๊ทธ๋ ์ง ์๋ค. ๊ทธ๋์ ๋ช
์์ ์ผ๋ก
run()
ํด์ฃผ์ด์ผ ํ๋ค. - RunLoop ๊ฐ์ฒด๊ฐ ํ์ํ๋ค๋ฉด, ์์ฑํ์ง ์๊ณ
RunLoop.current
๋๋RunLoop.main
๋ฑ์ผ๋ก ์์คํ ์์ ์์ฑ๋ ๊ฐ์ฒด์ ์ ๊ทผํด์ผ ํ๋ค.
RunLoop์ ์กด์ฌ ์ด์ ์ ์๋ฆฌ
ํต์ฌ์ input source, timer ๋๊ฐ์ง์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํจ์ด๋ค. input source๋ ๋ค๋ฅธ Thread๋ Application์ผ๋ก ๋ถํฐ ์จ ๋น๋๊ธฐ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌ๋ฐ๋ ๊ฒ์ ๋งํ๋ค. Timer source๋ scheduled๋ ์๊ฐ ํน์ ํน์ ์ฃผ๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ๋ณต๋๋ ๋๊ธฐ ์ด๋ฒคํธ๋ฅผ ์ ๋ฌ ๋ฐ๋๋ค.
์ด ๊ทธ๋ฆผ์ ๋ณด๋ฉด, ์๋ Input sources์ด๊ณ , ์๋๋ Timer sources์ด๋ค. Input sources๋ถํฐ ๋ณด๋ฉด, ์ผ์ชฝ์ ์๋ Thread์ ์์
์ ๋ง๊ตฌ ์์๋๊ณ , run loop์ run์ ํธ์ถํ์ฌ ์์ฌ์๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์์์ ๋ํ๋ด๊ณ ์๋ค. ์ด ๋, run loop์ runUntilDate
๋ฅผ ์ฌ์ฉํ๊ณ ์์ด, ํน์ ๋ ์ง์ run loop์ ์ข
๋ฃํ๋๋ก ํ๊ณ ์๋ค. ๊ทธ์ ๋ฐ๋๋ก ์ ๊ทธ๋ฆผ์์๋ Timer์ ๊ฒฝ์ฐ event๋ฅผ ์ ๋ฌํ์ง๋ง run loop๊ฐ ์ข
๋ฃ๋๋๋ก ํ์ง๋ ์๊ณ ์๋ค.
์ฌ๊ธฐ์ ๋ณด๋ฉด, run loop์ ์กด์ฌ ์ด์ ์ธ ํ ์ผ์ด ์์ ๊ฒฝ์ฐ์๋ Thread๋ฅผ busyํ๊ฒ ๋๊ณ , ๊ทธ๋ ์ง ์์ ๋๋ sleep ํ๋๋ก ํ๊ธฐ ์ํจ์ ์ ๋ง๋ ์ค๊ณ๋ผ ๋ณผ ์ ์๋ค. ๋ช ์์ ์ผ๋ก programmer๊ฐ runํ๋๋ก ํ์ฌ resource๋ฅผ ์๋ผ๊ฒ ๋ค๋ ์๋๊ฐ ๋ค๋ถํ ๋ณด์ธ๋ค.
loop๋ฅผ ์คํ์ํค๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค. ์ํฉ์ ๋ง๊ฒ ์ฝ๊ณ ์ฌ์ฉํ๋ฉด ๋๊ฒ ๋ค.
Main Run Loop
์ฌ์ค ์ฐ๋ฆฌ๊ฐ ์ด RunLoop์ ๊ฐ์ฅ ๋ง์ด ๋ง์ฃผํ๋ ๊ณณ์ ์ด๊ฑฐ๋ค. ์ด๋ฒคํธ ๋ฃจํ๋ก์ ์ฌ์ฉ์ event๋ฅผ ๋ฐ์ application์ ์ ๋ฌํ๋, ๊ทธ ์ญํ ์ ํ๋ ๊ฒ์ด ์ด๋ ์์ด๋ค. ๊ทธ๋์ ์์์ ์ค๋ช ํ ๋, main run loop๋ ํญ์ run๋์ด์๋ ์ํ๋ผ๊ณ ๋งํ๋ ๊ฒ์ด๋ค. ์ด ๊ทธ๋ฆผ์์ run loop์ ์ญํ ์ ์๊ฐํ๋ค๋ฉด, ์ ์ ๋ฐ์์ผ๋ก ์ ์๋ฅผ ํด๋์๋์ง ์ฝ๊ฒ ์ดํด๊ฐ ๊ฐ๋ฅํ๋ค.
๋ง๋ฌด๋ฆฌ
์ด ๋ถ๋ถ์ ๊น๊ฒ ์ดํดํ๋ ๊ฒ์ ์ด๋ ค์ ๋ค. ๋๋ฒ์งธ์ธ๋ฐ๋ ์ค์ ์ฝ๋๋ฅผ ๋ฏ์ด๋ณด์ง ๋ชปํ๋ ์ด๋ ต๋ค. ๋!