๐Ÿ‘‰๐Ÿป JavaScript์˜ ๋Ÿฐํƒ€์ž„ ๋ชจ๋ธ์€ ์ฝ”๋“œ์˜ ์‹คํ–‰, ์ด๋ฒคํŠธ์˜ ์ˆ˜์ง‘๊ณผ ์ฒ˜๋ฆฌ, ํ์— ๋Œ€๊ธฐ ์ค‘์ธ ํ•˜์œ„ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š”ย ์ด๋ฒคํŠธ ๋ฃจํ”„์— ๊ธฐ๋ฐ˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ๋ฃจํ”„

event-loop

  • ํž™: ๋‹จ์ˆœํžˆ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์ง€์นญํ•˜๋Š” ์šฉ์–ด. ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ง€๋Š” ๊ณณ์œผ๋กœ ๋ณ€์ˆ˜ ๋“ฑ์˜ ์ •๋ณด ์ €์žฅ.
    • (์ฝœ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์— ์žˆ๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ ์ฐธ์กฐ๋˜๋Š” ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„)
  • ์ฝœ์Šคํƒ: ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ณณ
    • (์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์ œ๊ฑฐ๋˜๋ฉฐ ์ฝ”๋“œ์˜ ์‹คํ–‰์ˆœ์„œ๋ฅผ ๊ด€๋ฆฌ)
  • ์ฝœ๋ฐฑํ: ์ฒ˜๋ฆฌํ•  ๋ฉ”์‹œ์ง€์˜ ๋Œ€๊ธฐ์—ด
    • (๋น„๋™๊ธฐ ํ•จ์ˆ˜์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜ ๋˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ๋Œ€๊ธฐ)

์˜ˆ์ œ๋กœ ์ฝœ์Šคํƒ ๋‚ด๋ถ€ ํ™•์ธํ•˜๊ธฐ

// main

function task(message) {
  // emulate time consuming task
  let n = 10000000000;
  while (n > 0) {
    n--;
  }
  console.log(message);
}

console.log('Start script...');
task('Call an API');
console.log('Done!');

call-stack


์ด๋ฒคํŠธ๋ฃจํ”„ ์ž‘๋™ ํ™•์ธํ•˜๊ธฐ

function greet() {
  console.log('Hello!');
}

function respond() {
  return setTimeout(() => {
    console.log('Hey!');
  }, 1000);
}

greet();
respond();
  1. greet ํ˜ธ์ถœ => respond ํ˜ธ์ถœ

gif1

  1. Web API์ธ setTimout ํ˜ธ์ถœ, setTimeout์˜ cb ์ „๋‹ฌ

gif2

  1. cb๋Š” 1์ดˆ๋’ค์— ์ฝœ๋ฐฑํ๋กœ ์ „๋‹ฌ

gif3

  1. ์ฝœ์Šคํƒ ๋น„์–ด์žˆ์„ ๋•Œ, ์ฝœ๋ฐฑํ์— ์žˆ๋˜ ๋Œ€๊ธฐ ์ž‘์—… ํ•˜๋‚˜์”ฉ ์ „๋‹ฌ

gif4

  1. cb ์‹คํ–‰

gif5


์ฐธ๊ณ ์ž๋ฃŒ