๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT

JavaScript Callstack: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ํ•ต์‹ฌ

by ๐Ÿ’ฒ๐ŸŽตโœ–๏ธโœ”๏ธโ˜ผ 2024. 3. 5.
728x90

JavaScript Callstack: ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ํ•ต์‹ฌ

์†Œ๊ฐœ

JavaScript Callstack(ํ˜ธ์ถœ ์Šคํƒ)์€ JavaScript ์—”์ง„์ด ํ•จ์ˆ˜ ์‹คํ–‰์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์ค‘ ํ•˜๋‚˜๋กœ, ์ฝ”๋“œ์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์Šคํƒ ํ˜•ํƒœ๋กœ ์ถ”์ ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๋ฐ˜ํ™˜์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ฝ”๋“œ์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

JavaScript Callstack์˜ ์—ญํ• 

1. ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๋ฐ˜ํ™˜ ๊ด€๋ฆฌ

Callstack์€ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์Šคํƒ์— ์Œ“๊ณ , ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ์™„๋ฃŒ๋˜๋ฉด ์Šคํƒ์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ

๊ฐ ํ•จ์ˆ˜ ์‹คํ–‰์— ๋Œ€ํ•œ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ์„ ์–ธ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์–ด ์ฝ”๋“œ ์‹คํ–‰์— ํ•„์š”ํ•œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

3. ๋น„๋™๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌ

๋น„๋™๊ธฐ ์ž‘์—…์ด ๋ฐœ์ƒํ•˜๋ฉด Callback Queue์™€ ํ•จ๊ป˜ Callstack์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Callback Queue์— ์žˆ๋Š” ํ•จ์ˆ˜๋“ค์€ Callstack์ด ๋น„์–ด์žˆ์„ ๋•Œ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์ƒํ™ฉ

JavaScript Callstack์€ ์ฃผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

1. ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐ ๋ฐ˜ํ™˜

ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด Callstack์— ํ•ด๋‹น ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ถ”๊ฐ€๋˜๊ณ , ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฉด ํ•ด๋‹น ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

2. ์žฌ๊ท€ ํ•จ์ˆ˜

์žฌ๊ท€ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค Callstack์— ์ƒˆ๋กœ์šด ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฏ€๋กœ, ์žฌ๊ท€ ํ˜ธ์ถœ์„ ํ†ตํ•ด ๋ฐ˜๋ณต ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋น„๋™๊ธฐ ์ž‘์—…์—์„œ Callstack, Callback Queue, ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ํ•จ๊ป˜ ๋™์ž‘ํ•˜์—ฌ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์žฅ๋‹จ์ 

์žฅ์ 

1. ์‹คํ–‰ ์ˆœ์„œ ๊ด€๋ฆฌ

Callstack์„ ํ†ตํ•ด ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

2. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์ œ๊ณต

๊ฐ ํ•จ์ˆ˜ ์‹คํ–‰์— ๋Œ€ํ•œ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋“ฑ์„ ์ ์ ˆํžˆ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ 

1. ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ

์ผ๋ถ€ ์ƒํ™ฉ์—์„œ ์žฌ๊ท€ ํ˜ธ์ถœ์ด ๋ฌดํ•œ์ • ์ผ์–ด๋‚˜๊ฑฐ๋‚˜ Callstack์ด ์ œํ•œ๋œ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JavaScript Callstack ์˜ˆ์ œ ์ฝ”๋“œ

1. ๊ธฐ๋ณธ ํ•จ์ˆ˜ ํ˜ธ์ถœ

function greet(name) {
  console.log(`Hello, ${name}!`);
}

function sayHello() {
  greet('John');
}

sayHello();

2. ์žฌ๊ท€ ํ•จ์ˆ˜

function countdown(n) {
  if (n <= 0) {
    return;
  }
  console.log(n);
  countdown(n - 1);
}

countdown(5);

3. ๋น„๋™๊ธฐ ์ž‘์—…

console.log('Start');

setTimeout(() => {
  console.log('Timeout callback');
}, 2000);

console.log('End');

์—ฐ๊ด€๋œ ๊ธฐ์ˆ 

JavaScript Callstack๊ณผ ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ์ด ์žˆ๋Š” ๊ธฐ์ˆ ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

1. Event Loop

๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ณ  Callstack์— ๋“ฑ๋กํ•˜๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„ ๊ฐœ๋…์ด ์—ฐ๊ด€๋ฉ๋‹ˆ๋‹ค.

2. Promise

๋น„๋™๊ธฐ ์ž‘์—…์„ ์ข€ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋„์ž…๋œ Promise ๊ฐœ๋…์ด Callstack๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

3. Async/Await

Promise๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” Async/Await ๋ฌธ๋ฒ•์ด Callstack๊ณผ ์—ฐ๋™ํ•˜์—ฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

JavaScript Callstack์€ JavaScript ์ฝ”๋“œ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ์ถ”์ ํ•˜๊ณ  ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ๊ด€๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์ดํ•ดํ•˜๋ฉด ์ฝ”๋“œ์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ๋” ๋ช…ํ™•ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋””๋ฒ„๊น… ๋ฐ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€