์๋ ํ์ธ์! Eric์ ๋๋ค
์น ๋ธ๋ผ์ฐ์ ์ ํต์ฌ ๊ธฐ๋ฅ ์ค ํ๋์ธ ์ด๋ฒคํธ ๋ฃจํ(Event Loop)์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด๋ฒคํธ ๋ฃจํ๋ ์น ๋ธ๋ผ์ฐ์ ์์ ๋์์ฑ์ ์ ์งํ๊ณ , ๋ค์ํ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๋ ์ญํ ์ ๋ด๋นํฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ์น ๋ธ๋ผ์ฐ์ ์ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์์๋ณด์์ฃ !
โ ์ด๋ฒคํธ ๋ฃจํ(Event Loop)๋?
์ด๋ฒคํธ ๋ฃจํ๋ ์น ๋ธ๋ผ์ฐ์ ์์ ๋ฐ์ํ๋ ๋น๋๊ธฐ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ญํ ์ ํ๋ ๋ฌดํ ๋ฃจํ์ด๋ค.
JavaScript๋ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด์ด๋ฏ๋ก, ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ ๋์์ฑ์ ์ ์งํ๋ฉฐ, ๋ค์ํ ์์ ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ค.
๐ ์ด๋ฒคํธ ๋ฃจํ์ ์๋ ์๋ฆฌ
์์)
ํ๋จ์ฒ๋ผ JavaScript ์ฝ๋๊ฐ ์์ฑ๋์ด์์ผ๋ฉด, ์ด๋ ํ ์์๋๋ก ๊ฒฐ๊ณผ๊ฐ ๋์ฌ๊น?
console.log(1+1);
setTimeout(function() { console.log(2+3) }, 1000);
console.log(7+3);
// ๊ฒฐ๊ณผ๋
2
10
5
//๋ก ๋์ฌ๊ฒ์ด๋ค.
์ด๋ฒคํธ ๋ฃจํ๋ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ์๋ํ๋ค.
1. ํธ์ถ ์คํ(Callback Stack)์ ํ์ธ
2. ํธ์ถ ์คํ์ด ๋น์ด ์์ผ๋ฉด, ํ(Queue)์์ ๊ฐ์ฅ ์ค๋๋ ์ด๋ฒคํธ(๋๋ ํ์คํฌ)๋ฅผ ๊บผ๋ธ๋ค.
3. ๊บผ๋ธ ์ด๋ฒคํธ๋ฅผ ํธ์ถ ์คํ์ ์ถ๊ฐํ๊ณ ์คํ.
4. ์ด๋ฒคํธ ์คํ์ด ์๋ฃ๋๋ฉด ํธ์ถ ์คํ์์ ์ ๊ฑฐ.
5. ์ ๊ณผ์ ์ ๋ฌดํ ๋ฐ๋ณตํฉ๋๋ค.
์ด๋ฒคํธ ๋ฃจํ๋ ํธ์ถ ์คํ์ด ๋น์ด ์์ ๋๋ง ํ์์ ์ด๋ฒคํธ๋ฅผ ๊บผ๋ด์ ์คํํ๋ฏ๋ก,
๋๊ธฐ ์์ ์ด ์งํ๋๋ ๋์ ๋น๋๊ธฐ ์์ ์ ๋๊ธฐํ๊ฒ ๋๋ค.
๐ ๋น๋๊ธฐ ์์ ์ด๋?
์น ๋ธ๋ผ์ฐ์ ์์ ๋ค์๊ณผ ๊ฐ์ ๋น๋๊ธฐ ์์ ๋ค์ด ์ด๋ฒคํธ ๋ฃจํ์ ํจ๊ป ์๋ํ๋ค.
- ์ด๋ฒคํธ ๋ฆฌ์ค๋(Event Listeners): ์ฌ์ฉ์ ์ ๋ ฅ, ๋คํธ์ํฌ ์์ฒญ ๋ฑ ๋ค์ํ ์ด๋ฒคํธ์ ๋ฐ์ํ๋ ํจ์
- ํ์ด๋จธ(Timers): setTimeout ๋ฐ setInterval๊ณผ ๊ฐ์ ํ์ด๋จธ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๋ ์๊ฐ ํ์ ํจ์๋ฅผ ์คํ
- AJAX ์์ฒญ: ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ๊ธฐ์
โ ๊ฒฐ๋ก
์ด๋ฒคํธ ๋ฃจํ๋ ์น ๋ธ๋ผ์ฐ์ ์์ ๋์์ฑ์ ์ ์งํ๊ณ , ๋ค์ํ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๋ ํต์ฌ ๋ฉ์ปค๋์ฆ ์์คํ ์ด๋ค.
JavaScript๋ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด์ด์ง๋ง, ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ํตํด ๋ง์น ์ฌ๋ฌ ์์ ์ด ๋์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํ ์ ์๋ค.
์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์ดํดํ๊ณ ํ์ฉํ๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํฌ ์ ์๋ค.
์๋ฅผ๋ค์ด์, Stack์์ for๋ฌธ์ 100000๋ฒ ๋๋ ค์ 5์ด์ delay ๊ฐ ์๊ธด๋ค๊ณ ์๊ฐํด๋ณด์.
์ด๋, ๋ง์ฝ User๊ฐ for๋ฌธ์ด ๋๋ 5์ด์ ์๊ฐ๋์ ๋ฒํผ์ ์ฌ๋ฌ๋ฒ ํด๋ฆญ(Event Listener)ํ๋ค๋ฉด,
๋ธ๋ผ์ฐ์ ธ๋ Stack์ ์์ฌ์๋ for๋ฌธ์ ๋ค ๋๋๋์ ํด๋ฆญ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌ ํ ์ ์์ผ๋ฏ๋ก,
๋ฐ์์ ํ ์ ๊ฐ ์๋ค. ์๋ํ๋ฉด, ๋น๋๊ธฐ์์ (์ด ์์์์๋ ๋ฒํผ์ ํด๋ฆญํ๋ Event Listener)์ ๋๊ธฐ์ค์์ ๋๊ธฐํ๋ค๊ฐ,
Queue์์ ๋๊ธฐํ๋ค๊ฐ Stack์ด ๋น์ด์์๋๋ง Stack ์ผ๋ก ์ฌ๋ผ๊ฐ์ ๋ฐ์์ํ๋ค.
ํ์ง๋ง, ์ด ๊ฒฝ์ฐ์ for๋ฌธ์ ๋๊ณ ์์ผ๋ฏ๋ก, ๋ฒํผ ๋๋ฅธ๊ฒ์ ๋ฐ์์ ํ์ง ์์๊ฒ์ด๋ค. (์๋ํ๋ฉด ์์ง Queue ์์ ๋๊ธฐ์ค์ด๋๊น)
-> ์ด๋ฅผํตํด์ Stack๊ณผ Queue๋ฅผ ๋ฐ์๊ฒํ๋ฉด ์๋๊ฒ ๊ตฌ๋ ๋ผ๊ณ ์๊ฐ์...!
์ด๋ฒคํธ ๋ฃจํ์ ์๋ ์๋ฆฌ๋ฅผ ํตํด ์น ๋ธ๋ผ์ฐ์ ์์ ๋ฐ์ํ๋ ๋๊ธฐ ๋ฐ ๋น๋๊ธฐ ์์ ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ ์ ์๋ค.
์ด๋ฌํ ์ง์์ ํ์ฉํ์ฌ ํจ์จ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์์ผ๋ฉฐ, ์ฑ๋ฅ ๋ฐ ์ฌ์ฉ์ ๊ฒฝํ์ ์ต์ ํํ๋ ๋ฐ ๋์์ด ๋๋ค.
์ด๋ฒคํธ ๋ฃจํ๋ ์น ๊ฐ๋ฐ์๊ฐ ๋๊ธฐ ์ํ ์ค์ํ ๊ฐ๋ ์ค ํ๋์ด๋ฏ๋ก, ๊ผญ ์์งํ๊ณ ํ์ฉํ ์ ์๋๋ก ๋ ธ๋ ฅํ๋๋ก ํ์.