๐๋ธ๋ผ์ฐ์ ์ ๋ฉํฐ ์ค๋ ๋๋ก ์์ ์ ๋์์
JavaScript๋ ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด๋ก, ํ ๋ฒ์ ํ๋์ ์์ ๋ง ์ํ์ด ๊ฐ๋ฅํ๋ค. ๋ฐ๋ฉด Java๋ Python์ ๋ฉํฐ ์ค๋ ๋๋ฅผ ์ง์ํ์ฌ ์ํ๋ ์ฝ๋ ๋ก์ง์ ๋์์ ์ํ์ํค๋ ๋ฉํฐ ์์ ์ด ๊ฐ๋ฅํ๋ค.
์น ์ดํ๋ฆฌ์ผ์ด์ ์์๋ ๋คํธ์ํฌ ์์ฒญ์ด๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ, ํ์ด๋จธ์ ๊ฐ์ ์์ ์ ๋ฉํฐ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ง์ผ ์ฑ๊ธ ์ค๋ ๋๋ก ๋ธ๋ผ์ฐ์ ๋์์ด ํ๋ฒ์ ํ๋์ฉ ์ํํ๊ฒ ๋๋ฉด, ์ฐ๋ฆฌ๊ฐ ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ์ ๋์ ๋ธ๋ผ์ฐ์ ๋ ํ์ผ์ ๋ค ๋ฐ์ ๋๊น์ง ์น์ํ๋ ๋ชปํ๊ณ ๋ฉ์ถฐ ๋๊ธฐํด์ผ ํ๋ค. ๋ฐ๋ผ์ ํ์ผ ๋ค์ด, ๋คํธ์ํฌ ์์ฒญ, ํ์ด๋จธ, ์ ๋๋ฉ์ด์ ์ด๋ฌํ ์ค๋ ๊ฑธ๋ฆฌ๊ณ ๋ฐ๋ณต์ ์ธ ์์ ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์๋ ๋ธ๋ผ์ฐ์ ๋ด๋ถ์ ๋ฉํฐ ์ค๋ ๋์ธ Web APIs์์ ๋น๋๊ธฐ+๋ ผ๋ธ๋กํน์ผ๋ก ์ฒ๋ฆฌ๋๋ค. ๋น๋๊ธฐ+๋ ผ๋ธ๋กํน(Async+Non blocking)๋ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์์ ์ ๋ค๋ฅธ ๊ณณ์ ์์ฒญํ์ฌ ๋์ ์คํํ๊ณ , ๊ทธ ์์ ์ด ์๋ฃ๋๋ฉด ์ด๋ฒคํธ๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์คํํ๋ค. (ํ์ผ ๋ค์ด๋ก๋ ์์ฒญ ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ผ๋ก ์ ์ดํ์ฌ ๋์์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋๋ก ํ ๊ฒ)
๐๋ธ๋ผ์ฐ์ ์ ๋ด๋ถ ๊ตฌ์ฑ๋
๋ธ๋ผ์ฐ์ ๋ ์น ์ฌ์ดํธ๋ฅผ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก Web APIs, Event Table, Callback Queue, Event Loop ๋ฑ์ด ์๋ค.
์ฝ๋ฐฑ ํ์ ์ฝ๋ฐฑ ํจ์๊ฐ ๋ด๊ธฐ๊ณ , ์ด๋ฒคํธ ๋ฃจํ๊ฐ ๋๋ฉด์ ์ฝ ์คํ์ด ๋น์ด ์์ผ๋ฉด ์ฝ๋ฐฑ ํ์์ ํจ์๋ฅผ ์ฎ๊ฒจ ์คํํ๋ค.
- Call Stack: ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ฝ๋ ์คํ์ ์ํด ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
- Heap: ๋์ ์ผ๋ก ์์ฑ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ
- Web APIs: ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ API ๋ชจ์์ผ๋ก, ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ ์์ ๋ค์ ์ ๋ดํ์ฌ ์ฒ๋ฆฌํ๋ค. (AJAX ํธ์ถ, ํ์ด๋จธ ํธ์ถ, DOM ์กฐ์ ๋ฑ)
- Callback Queue: ๋น๋๊ธฐ ํจ์๋ค์ ์ ์ ํ ์์ ์ ์คํ์ํค๋ ๊ด๋ฆฌ์
- Event Table: ํน์ ์ด๋ฒคํธ(timeout, click, mouse ๋ฑ)๊ฐ ๋ฐ์ํ์ ๋ ์ด๋ค callback ํจ์๊ฐ ํธ์ถ๋์ด์ผ ํ๋์ง๋ฅผ ์๊ณ ์๋ ์๋ฃ ๊ตฌ์กฐ
๐Callback Queue์ ์ข ๋ฅ
Callback Queue์๋ (macro)task queue์ microtask queue๊ฐ ์๋ค. ์ฐ์ ์์๋ MicroTask Queue>Task Queue์ด๋ค.
Task Queue: setTimeout, setInterval, fetch, addEventListener์ ๊ฐ์ด ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋๋ ํจ์๋ค์ ์ฝ๋ฐฑ ํจ์๊ฐ ๋ค์ด๊ฐ๋ ํ
MicroTask Queue: Promise์ .then, .catch, .finally, MutationObserver ์ฝ๋ฐฑ ๋ฑ
console.log('Start!');
setTimeout(() => {
console.log('Timeout!');
}, 0);
Promise.resolve('Promise!').then(res => console.log(res));
console.log('End!');
1) console.log('Start!');
Call Stack์ console.log("Start!") ์ฝ๋ ๋ถ๋ถ์ด ์์ธ ๋ค ์คํ๋์ด ์ฝ์์ฐฝ์ "Start!")๊ฐ ์ถ๋ ฅ๋๋ค.
2) setTimeout
setTimeout ์ฝ๋๊ฐ ์ฝ ์คํ์ ์ ์ฌ๋๊ณ ์คํ๋๋ฉด, ๊ทธ ์์ ์ฝ๋ฐฑ ํจ์๊ฐ ์ด๋ฒคํธ ๋ฃจํ์ ์ํด Web APIs๋ก ์ฎ๊ฒจ์ง๊ณ ํ์ด๋จธ๊ฐ ์๋ํ๊ฒ ๋๋ค. ํ์ด๋จธ๊ฐ ์ข ๋ฃ๋๋ฉด ์ฝ๋ฐฑํจ์๋ Task Queue์ ์ด๋ฒคํธ ๋ฃจํ์ ์ํด ์ ์ฌ๋๋ค.
3) Promise
Promise ์ฝ๋๊ฐ ์ฝ์คํ์ ์ ์ฌ๋์ด ์คํ๋๊ณ , then ํธ๋ค๋ฌ์ ์ฝ๋ฐฑ ํจ์๊ฐ ์ด๋ฒคํ ๋ฃจํ์ ์ํด MicroTask Queue
์ ์ํด ์ ์ฌ๋๋ค.
4) console.log('End!')
Promise ์ฝ๋๊ฐ ์ฝ์คํ์ ์ ์ฌ๋์ด ์คํ๋๊ณ then ํธ๋ค๋ฌ์ ์ฝ๋ฐฑ ํจ์๊ฐ ์ด๋ฒคํธ ๋ฃจํ์ ์ํด MicroTask Queue์ ์ ์ฌ๋๋ค.
์ฆ, 1>4>3>2์ ์์๋ก ์คํ๋๋ ๊ฒ์ด๋ค.
'๐CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Git ๋ธ๋์น ์ ๋ต (1) | 2024.12.06 |
---|---|
JWT ํ ํฐ ๊ตฌ์กฐ์ ํ์ฉ ๋ฐฉ๋ฒ (3) | 2024.12.06 |
๊ฐ๋ฐ ์ธ์ด (1) | 2024.11.20 |
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP, Object-Oriented Programming) (0) | 2024.11.20 |
์ํํธ์จ์ด V&V(Verification & Validation) (2) | 2024.11.20 |