블로그/CS 기초
CS 기초주니어2026-06-17

스택(Stack)과 힙(Heap) 메모리 영역의 차이는 무엇인가요?

한 줄 답변

스택은 정적 할당으로 속도가 빠르고 자동으로 메모리가 해제되나 크기가 제한적이며, 힙은 동적 할당으로 큰 데이터를 자유롭게 다루지만 관리가 필요하고 속도가 상대적으로 느립니다.

핵심 개념 정리

프로세스가 실행될 때 운영체제로부터 할당받는 메모리 공간은 크게 코드, 데이터, 스택, 힙 영역으로 나뉩니다. 그중 스택(Stack)은 함수의 매개변수, 지역 변수, 리턴 값 등 일시적인 데이터를 저장하는 공간입니다. LIFO(Last In First Out) 구조를 따르며, 컴파일 타임에 크기가 결정됩니다. 함수 호출과 동시에 할당되고 종료 시 자동으로 해제되기에 관리 오버헤드가 거의 없지만, 공간이 매우 한정적이라는 특징이 있습니다.

반면 힙(Heap)은 프로그램 실행 중(Runtime)에 크기가 결정되는 동적 할당 영역입니다. 사용자가 직접 메모리 크기를 지정하여 할당받으며, Java나 Kotlin 같은 언어에서는 가비지 컬렉터(GC)가, C/C++에서는 개발자가 직접 해제를 관리합니다. 스택보다 훨씬 큰 공간을 가질 수 있어 전역적으로 공유해야 하거나 크기가 큰 객체를 저장하기에 적합합니다. 하지만 메모리를 할당하고 해제할 빈 공간을 찾는 과정이 필요해 스택에 비해 속도가 느립니다.

두 영역은 물리적으로 같은 메모리 공간을 공유하며 서로 마주 보는 방향으로 자라납니다. 보통 스택은 높은 주소에서 낮은 주소로, 힙은 낮은 주소에서 높은 주소로 확장됩니다. 만약 스택이 힙 영역을 침범하면 스택 오버플로우(Stack Overflow)가, 반대로 힙이 스택을 침범할 정도로 커지면 힙 오버플로우(Out of Memory)가 발생하게 됩니다. 따라서 데이터의 수명과 크기에 따라 적절한 영역을 활용하는 설계가 중요합니다.

비교 정리

항목스택(Stack)힙(Heap)
할당 방식정적 할당 (컴파일 타임 결정)동적 할당 (런타임 결정)
관리 주체컴파일러 / OS (자동 해제)개발자 / GC (명시적/자동 관리)
접근 속도매우 빠름 (포인터 이동 방식)상대적으로 느림 (탐색 필요)
주요 특징크기가 작고 제한적임메모리 파편화 발생 가능성 있음

면접에서 이렇게 답하세요

단순히 '스택은 빠르고 힙은 느리다'는 답변에 그치지 말고, 실제 프로그래밍 언어의 특징과 연결해 설명하세요. 예를 들어 Java의 경우 '기본형 지역 변수는 스택에, 참조형 객체는 힙에 저장된다'는 점을 언급하고, 재귀 함수 깊이에 따른 StackOverflowError나 대량의 객체 생성 시 발생하는 GC 부하 및 Stop-the-world 현상을 실무적 트러블슈팅 사례로 곁들이면 좋은 평가를 받을 수 있습니다.

자주 묻는 추가 질문

Q. 지역 변수는 항상 스택에 저장되나요?

기본적으로 그렇지만, 해당 변수가 객체(참조형)라면 변수 자체(참조값)는 스택에, 실제 데이터는 힙에 저장됩니다.

Q. 메모리 파편화(Fragmentation)란 무엇인가요?

힙 영역에서 메모리 할당과 해제가 반복되면서 빈 공간이 조각나, 전체 크기는 충분해도 큰 객체를 담지 못하는 현상입니다.

Q. 스택 오버플로우는 언제 주로 발생하나요?

탈출 조건이 없는 무한 재귀 호출이나 너무 많은 지역 변수를 선언하여 할당된 스택 크기를 초과할 때 발생합니다.

커뮤니티 하이라이트

실무에선 메모리 릭(Leak) 방지를 위해 힙 영역 관리가 핵심입니다. 특히 대규모 트래픽 처리 시 GC 튜닝의 기초가 되는 지식이죠.

@backend_wiz42

스택과 힙의 방향이 서로 마주 본다는 점을 그림 그리듯 설명했더니 면접관님이 굉장히 흡족해하셨던 기억이 나네요.

@dev_renee21

38명의 개발자가 이 질문에 참여했습니다

관련 면접 질문

앱에서 직접 답변해보세요

매일 3개의 면접 질문에 답변하고,
다른 개발자들의 답변을 비교해보세요.

무료로 시작하기