Call stack

wonyoung·2024년 3월 31일

Javascript

목록 보기
27/36

JavaScript의 호출 스택(Call Stack)은 프로그램에서 함수의 호출과 실행을 추적하는 메커니즘입니다. 이는 자바스크립트 엔진이 함수 실행의 순서를 관리하는 방식입니다. 호출 스택은 LIFO(Last In, First Out) 방식으로 작동하는 스택 구조를 가집니다. 즉, 가장 마지막에 호출된 함수가 가장 먼저 완료되어 스택에서 제거됩니다.

작동 방식:

  1. 함수 호출: 프로그램에서 함수를 호출하면, 해당 함수는 실행을 위해 호출 스택에 푸시(추가)됩니다.
  2. 함수 실행: 스택의 맨 위에 있는 함수가 실행됩니다. 함수 실행 중 다른 함수를 호출하면, 그 함수도 스택의 맨 위에 푸시되어 바로 실행에 들어갑니다.
  3. 함수 반환: 함수의 실행이 완료되면, 그 결과는 반환되고, 해당 함수는 스택에서 팝(제거)됩니다. 그 다음 스택의 맨 위에 있는 함수가 실행을 계속합니다.

예시:

function firstFunction(){
    secondFunction();
    console.log("첫 번째 함수 호출");
}
function secondFunction(){
    thirdFunction();
    console.log("두 번째 함수 호출");
}
function thirdFunction(){
    console.log("세 번째 함수 호출");
}
firstFunction();

위의 코드 실행 과정에서 호출 스택의 상태는 다음과 같이 변화합니다:

  • firstFunction 호출 → 스택: [firstFunction]
  • secondFunction 호출 → 스택: [firstFunction, secondFunction]
  • thirdFunction 호출 → 스택: [firstFunction, secondFunction, thirdFunction]
  • thirdFunction 완료 → 스택: [firstFunction, secondFunction]
  • secondFunction 완료 → 스택: [firstFunction]
  • firstFunction 완료 → 스택: []

중요한 포인트:

  • 스택 오버플로우: 호출 스택의 크기가 제한적이기 때문에, 너무 많은 함수 호출이 스택 오버플로우를 일으킬 수 있습니다. 이는 주로 잘못된 재귀 호출에서 발생합니다.
  • 비동기 처리: 자바스크립트는 단일 스레드 언어이지만, Web APIs, Promise 등을 통해 비동기 처리를 지원합니다. 호출 스택과는 별개로 동작하는 이러한 비동기 처리 메커니즘이 있기 때문에, 자바스크립트는 비동기 이벤트를 효율적으로 처리할 수 있습니다.
    호출 스택은 자바스크립트 엔진의 핵심 구성 요소 중 하나로, 함수 호출의 순서와 스코프를 관리하는 데 중요한 역할을 합니다.

FILO(First In, Last Out)과 FIFO(First In, First Out)는 데이터 구조에서 자료의 순서를 관리하는 두 가지 주요 방식입니다. 이들은 특히 큐(Queue)와 스택(Stack) 자료구조에서 각각 사용됩니다. 이러한 자료구조는 프로그래밍에서 다양한 알고리즘과 프로세스 관리, 데이터 저장 및 접근 방식을 구현하는 데 사용됩니다.

profile
😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀

0개의 댓글