스택과 힙
스택(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 |