본문 바로가기

자바스크립트

스택(Stack)과 힙(Heap)

스택과 힙

 

스택(Stack)

  • 정적으로 할당되는 메모리 영역
  • 기본형의 데이터와 참조 변수의 주소값이 저장됨
  • 순서대로 메모리가 쌓이는 구조로 LIFO(Last In First Out)
  • 크기가 고정되어 있어 메모리 관리가 빠르고 효율적

 

힙(Heap)

  • 동적으로 할당되는 메모리 영역
  • 참조형의 데이터가 저장되는 공간(객체, 배열 등)
  • 크기가 동적으로 변할 수 있어 큰 데이터를 저장하기에 적합

 

스택과 힙의 주요 차이점

  스택(Stack) 힙(Heap)
메모리 관리 방식 자동 메모리 관리, LIFO(Last In First Out) 구조 수동/자동(가비지 컬렉션) 메모리 관리, 비순차적 할당
성능 매우 빠른 메모리 할당과 접근 상대적으로 느린 메모리 할당과 접근
생명주기 함수 호출과 함께 생성, 종료와 함께 제거 프로그래머가 명시적으로 해제하거나 가비지 컬렉터가 처리

 


변수의 메모리 할당 과정

1. 기본 타입

  • number, boolean 등은 스택 메모리에 직접 저장
  • string 작은 문자열은 스택에 직접 저장 / 큰 문자열은 힙에 저장 후 스택에 참조 주소 저장
  • 값 자체가 메모리에 저장됨
  • 크기가 고정되어 있어 빠른 접근이 가능
// 기본 타입 (스택 메모리)
let number = 15;        // 숫자
let name = "hayoung";   // 문자열
let isTrue = true;      // 불리언

 

 

2. 참조 타입

  • object, array, function 등은 힙 메모리에 저장
  • 실제 데이터는 힙에 저장되고, 스택에는 해당 데이터의 참조 주소만 저장
  • 가비지 컬렉션으로 메모리 관리
// 참조 타입 (힙 메모리)
let array = [1, 2, 3];   // 배열
let object = {           // 객체
    id: 1,
    username: "hayoung"
};

 

 

메모리 구조 시각화

 

 

메모리 참조 동작 예시

let originalObj = { value: 42 };
let copyRef = originalObj;  // 같은 힙 메모리 참조

copyRef.value = 100;  // originalObj의 값도 변경됨
console.log(originalObj.value);  // 100

 

 

주요 특징 간단정리

  • 기본 타입은 값 복사
  • 참조 타입은 참조 복사
  • 가비지 컬렉션이 자동으로 사용하지 않는 메모리 해제

 

'자바스크립트' 카테고리의 다른 글

콜백함수  (0) 2024.12.14
this  (0) 2024.12.13
실행컨텍스트(Execution Context)  (0) 2024.12.03
얕은복사와 깊은복사, structuredClone()  (0) 2024.12.02
데이터 타입  (0) 2024.11.26