변경점 비교

콜 스택

변경전: 2024. 08. 12. 17:47:40 (luasenvy (luasenvy))

변경후: 2025. 11. 17. 09:13:02 (luasenvy (luasenvy))

## Stack

![스택 width-309 height-348](/api/image/2025/10/3/13/08d409912fa488cf958792c96d67dec0-o)

스택은 자료구조의 하나로 위 그림처럼 입력과 출력 한 곳에서만 이루어진수행한다. 입력과 출력을 한 곳에따라 이루어지기 때문에그림처럼 순서대로 입력되고 순서의 역순으로 출력된다. 'Last In First Out'~LIFO~, '후입선출' 등의 이름으로 불리기도 한다.

```js:stack.js
const store = [];
// 배열의 마지막 부분을 통해서만 입력한다.
store.push(1);
store.push(2);
store.push(3);

let cursor;
// 배열의 마지막 부분을 통해서만 출력한다.
cursor = store.pop(); // 3
cursor = store.pop(); // 2
cursor = store.pop(); // 1
```

## Call Stack

자바스크립트에서는 함수~Function~가 호출~call~되면 내부적으로 '콜 스택'이라고 하는 저장공간을 사용한다. 이름에서 볼 수 있듯이 스택 방식으로 관리되며 이곳에는 실행중인 함수들이 순서대로 저장된다. 함수가 호출될 때마다 호출된 함수를 스택에 입력하고 함수가 종료되면 스택으로부터 출력~제거~된다.

```js:Function^Call
const B = (num) => num + Math.trunc(Math.random() * 100);

const A = () => B(Math.trunc(Math.random() * 50))

A();
```

위 예제코드처럼 함수 내에서 다시 함수를 호출하는 경우가 있다고 가정한다면 가장 먼저 호출된 A가 저장공간에 할당되고 A가 종료되기 전 B가 호출되기 때문에 A, B 순서로 콜 스택에 저장된다. 이렇게 실행되는 함수들은 자연스럽게 역순으로 종료되는데 스택의 입출력 형식과 동일한 것을 확인할 수 있다.