๋น๋๊ธฐ๋?
๋์์ ์ฌ๋ฌ ์์ ์ ํด๋ณผ ์ ์๋ค!
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋จ์ผ ์ค๋ ๋ ๊ธฐ๋ฐ์ ์ธ์ด๋ก ํ ์๊ฐ ํ๋์ ์์ ๋ง์ ์ฒ๋ฆฌํ ์ ์๋ค.
ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋น ๋๊ธฐ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ๋จ์ผ ์ค๋ ๋์๋ ๋ถ๊ตฌํ๊ณ ๋์์ ๋ง์ ์์ ์ ์ํํ๋ค. => ๋น๋๊ธฐ
=> ์ฃผ์ํ ์ ! ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด ์์ฒด๊ฐ ๋น๋๊ธฐ ๋์์ ์ง์ํ๋ ๊ฒ์ ์๋๋ค.
๋น ๋๊ธฐ๋ก ๋์ํ๋ ํต์ฌ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๊ฐ ์๋๋ผ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ง๊ณ ์๋ค.
๋ธ๋ผ์ฐ์ ๋ Web APIs, Event Table, Callback Queue, Event Loop ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์คํ๋ ๋ ๋ธ๋ผ์ฐ์ ์์ ๋์์ ์๋ ๊ทธ๋ฆผ์ผ๋ก ํํํ ์ ์๋ค.
- Web APIs: setTimeout์ด Call Stack์ ๋ค์ด์ ์คํ๋๋ฉด Browser API์ธ timer๋ฅผ ํธ์ถํ๋ค.
- Event Table: ํน์ event(timeout, click, mouse move ๋ฑ๋ฑ)๊ฐ ๋ฐ์ํ์ ๋ ์ด๋ค callback ํจ์๊ฐ ํธ์ถ๋์ผ ํ๋์ง๋ฅผ ์๊ณ ์๋ค.
- Callback Queue: ์ด๋ฒคํธ ๋ฐ์ ์ ์คํํด์ผ ํ callback ํจ์๊ฐ Callback Queue์ ์ถ๊ฐ๋๋ค.
- Event Loop: Call Stack์ด ๋น์ด์์ ๊ฒฝ์ฐ, Callback queue์์ ํจ์๋ฅผ ๊บผ๋ด Call Stack์ ์ถ๊ฐํ๋ค.
๐์๋ ๋งํฌ๋ก js event loop์ ๋ํด ์ดํดํ ์ ์์์ต๋๋ค.๐
์ฐธ์กฐ *์ด๋ฒคํธ ๋ฃจํ*
setTimeout ํจ์
setTimeout ํจ์์ ์ฒซ๋ฒ์งธ ์ธ์๋ ๊ธฐ๋ค๋ฆฐ ํ์ ์คํ์ํฌ ํจ์, ๊ทธ ๋ค์์ ๊ธฐ๋ค๋ฆด ๋ฐ๋ฆฌ์ด(delay) ์ด๋ค.
ํ์ง๋ง setTimeout์ delay์ธ์๊ฐ delay ms ํ์ ์คํ ๋๋ ๊ฒ์ ๋ณด์ฅํ์ง ์๋๋ค. ์ ํํ๋ delay ms ํ์ Callback Queue์ ๋ค์ด๊ฐ๋ ๊ฒ์ ๋ณด์ฅํ๋ค.
์๋ํ๋ฉด!
setTimeout์ delay ms ํ์ ์ด๋ฏธ call stack์ ๋ค์ ํจ์๊ฐ ๋ค์ด๊ฐ ์๋ค๋ฉด, ์ฆ call stack์ด ๋น์ด์์ง ์๋ค๋ฉด Event Loop๋ callback queue์ ์๋ setTimeout์ ๊ฒฐ๊ณผ ํจ์๋ฅผ ๊ฑฐ๋ค๋ ๋ณด์ง ์๋๋ค.