๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ vs ๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ
๋ฌด์จ ์ฐจ์ด์ผ๊น?
๋๊ธฐ ์ฒ๋ฆฌ
: ํ์ฌ ์คํ ์ค์ธ ํ์คํฌ๊ฐ ์ข ๋ฃํ ๋๊น์ง ๋ค์ ํ์คํฌ๊ฐ ๋๊ธฐํ๋ ๋ฐฉ์
-> ์คํ ์์๊ฐ ๋ณด์ฅ๋์ง๋ง ์คํ ์ค์ธ ํ์คํฌ๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ์ดํ ํ์คํฌ๋ค์ ๋ธ๋กํน ๋ฉ๋๋ค.
๋น๋๊ธฐ ์ฒ๋ฆฌ
: ํ์ฌ ์คํ ์ค์ธ ํ์คํฌ๊ฐ ์ข ๋ฃ๋์ง ์๋๋ผ๋ ๋ค์ ํ์คํฌ๋ฅผ ์คํํ๋ ๋ฐฉ์
-> ๋ธ๋กํน์ด ๋ฐ์ํ์ง ์์ง๋ง ์คํ ์์๋ ๋ณด์ฅ๋์ง ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ์ฝ๋ ์์
function a(){
console.log('a');
}
function b(){
setTimeout(a, 300);
console.log('b');
}
b();
//์คํ๊ฒฐ๊ณผ
//'b'
//'a'
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ์ง ์๋๋ค๋ฉด
aํจ์๊ฐ ์คํ๋ ํ์ bํจ์๊ฐ ์คํ๋์ด์ผ ํฉ๋๋ค.
์ด๋ฒคํธ๋ฃจํ๋ฅผ ํตํด ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์
setTimeoutํจ์์ ์ฝ๋ฐฑํจ์๊ฐ ์คํ๋๊ธฐ ์ ์
bํจ์๊ฐ ์คํ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ป๊ฒ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ ๊น?
์๋ฐ์คํฌ๋ฆฝํธ ์์ฒด๋ ์ฑ๊ธ ์ค๋ ๋ ๋ฐฉ์์ผ๋ก ๋์ํ์ง๋ง
๋ฐํ์ ํ๊ฒฝ์ธ ๋ธ๋ผ์ฐ์ ๋๋ Node.js์์ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ํตํด ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ง์ํฉ๋๋ค.
์ด๋ฒคํธ ๋ฃจํ๋ ํ์คํฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์กด์ฌํ๋ ๋ฃจํ์
๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ๋์์ฑ์ ์ง์ํ๊ธฐ ์ํ ๋ธ๋ผ์ฐ์ ๋๋ Node.js์ ๊ธฐ๋ฅ์
๋๋ค.
๋์์ฑ: ๋์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ
๋ณ๋ ฌ์ฑ: ์ค์ ๋ก ๋์์ ์คํ๋๋ ๊ฒ
JavaScript ์์ง์ Memory Heap๊ณผ Call Stack์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ํจ์๊ฐ ํธ์ถ๋๋ฉด Call Stack์ ์์ด๊ฒ ๋ฉ๋๋ค.
- ์ด๋ฒคํธ ๋ฃจํ๋ Call Stack์ด ๋น์ด์์ ๊ฒฝ์ฐ, Callback Queue(Task Queue)์์ ํจ์๋ฅผ ๊บผ๋ด Call Stack์ ์ถ๊ฐํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ณ๋ ฌ ์ฒ๋ฆฌ
- Call Stack์ ์๋ ๋น๋๊ธฐ ํจ์๋ ๋ธ๋ผ์ฐ์ ๋๋ Node.js์์ ์ฒ๋ฆฌ๋ฅผ ํ๊ฒ ๋๊ณ , ๋น๋๊ธฐ ํจ์์ ์์ ์ด ์๋ฃ๋๋ฉด ์คํ๋ ์ฝ๋ฐฑํจ์๋ฅผ Callback Queue๋ก ๋๊ฒจ์ฃผ๊ฒ ๋ฉ๋๋ค.
- ๊ทธ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ Call Stack์ ์๋ ๋๋จธ์ง ๋๊ธฐ ํจ์๋ค์ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
์ฝ์คํ์ด ๋น์ด์์ ๋ ์ฝ๋ฐฑ ํ์์ ์๋ ์ฝ๋ฐฑํจ์๋ค์ ์ฝ์คํ์ ์ถ๊ฐํ๊ธฐ ๋๋ฌธ์
์๋ ์ฝ๋์ฒ๋ผ setTimeoutํจ์๊ฐ 0์ด ํ์ ์คํ๋๊ฒ๋ ์ค์ ์ ํด๋ ๋ฐ๋ก ์คํ์ด ๋๋ ๊ฒ์ด ์๋๋ผ
console.log('b')๊ฐ ๋จผ์ ์คํ๋จ์ ์ ์ ์์ต๋๋ค.
function a(){
console.log('a');
}
function b(){
setTimeout(a, 0);
console.log('b');
}
b();
//์คํ๊ฒฐ๊ณผ
//'b'
//'a'
์ฝ๋ฐฑ ํ์๋ ์ด๋ค ์ข ๋ฅ๊ฐ ์์๊น?
์ฝ๋ฐฑ ํ์ ์ข ๋ฅ๋ก๋
Task Queue, Microtask Queue,Animation Frames๊ฐ ์์ต๋๋ค.
์ฐ์ ์์ ์์ผ๋ก ์คํ๋ฉ๋๋ค
1. Microtask Queue :ํ๋ก๋ฏธ์ค์ ํ์ ์ฒ๋ฆฌ ๋ฉ์๋์ ์ฝ๋ฐฑํจ์๊ฐ ๋ณด๊ด๋จ
: process.nextTick, Promises, queueMicroTask, MutationObserver
2. Animation Frames: requestAnimationFrame๊ณผ ๊ฐ์ ๋ฉ์๋์ ์ฝ๋ฐฑํจ์๊ฐ ๋ณด๊ด๋จ
3. Task Queue:setTimeout ๊ฐ์ ๋น๋๊ธฐ ํจ์์ ์ฝ๋ฐฑ ํจ์ ๋๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ๋ณด๊ด๋จ
: setTimeout, setInterval, setImmediate
๋ ๋๋ง์ ์ธ์ ์คํ๋ ๊น?
๋ง์ดํฌ๋ก ํ์คํฌ ํ๋ฅผ ์คํํ ๋ค ๋ ๋๋ง์ด ์ผ์ด๋๋ค.
๋ง์ดํฌ๋ก ํ์คํฌ ํ์ ์๋ ๋ชจ๋ ์์ ์ ์ฐ์ ์ ์ผ๋ก ๋ง๋ฌด๋ฆฌ ํ ํ ๋ ๋๋ง์ ํ๋ค.
'๐ป ํ๋ก ํธ์๋ > ๐ JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS]๋ณ๋ ฌ์ ์ผ๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌํ๊ธฐ (0) | 2024.04.19 |
---|---|
[์๋ฐ์คํฌ๋ฆฝํธ] ํด๋ก์ (1) | 2023.12.27 |
[์๋ฐ์คํฌ๋ฆฝํธ] ์คํ์ปจํ ์คํธ (0) | 2023.12.27 |
[์๋ฐ์คํฌ๋ฆฝํธ] ์ค์ฝํ (0) | 2023.12.27 |
[์๋ฐ์คํฌ๋ฆฝํธ] This (0) | 2023.12.27 |