본문 바로가기
카테고리 없음

[기획 연재 4편] 스택(Stack)과 힙(Heap): 컴퓨터의 정리 정돈 기술 (메모리 구조)

by khhjyc_ 2026. 1. 17.

서론: 운동장에도 구획이 필요하다

지난 3편에서 우리는 메모리(RAM)가 데이터들이 머무는 물리적인 공간, 즉 '작업용 책상'이라고 배웠습니다. 하지만 책상이 넓다고 해서 물건을 아무렇게나 던져두면 어떻게 될까요? 금방 난장판이 되어 중요한 서류를 찾지 못할 것입니다.

컴퓨터는 효율성에 목숨을 건 기계입니다. 그래서 컴퓨터는 RAM이라는 거대한 운동장을 그냥 두지 않고, 매우 영리한 방식으로 구획을 나누어 사용합니다. 바로 스택(Stack) 영역힙(Heap) 영역입니다.

제가 NASA에서 임베디드 시스템을 설계할 때, 가장 신경 썼던 부분 중 하나가 바로 이 두 영역의 균형을 맞추는 것이었습니다. 이 둘의 차이를 이해하는 것은 "빠르고 안정적인 프로그램"을 만드는 핵심 열쇠입니다. 오늘 4편에서 그 정리 정돈의 미학을 파헤쳐 봅니다.

본론 1: 스택(Stack), 엄격하고 빠른 탑 쌓기

스택(Stack)의 사전적 의미는 '무더기' 또는 '쌓아 올리다'입니다. 식당에 갔을 때 식판이 쌓여 있는 모습을 상상해 보십시오.

Last In, First Out (후입선출)

새 식판을 놓을 때는 맨 위에 놔야 하고, 꺼낼 때도 맨 위에서부터 꺼내야 합니다. 중간에 있는 식판을 억지로 뺄 수는 없습니다. 메모리의 스택 영역도 똑같습니다.

  • 특징: 데이터가 들어오고 나가는 순서가 엄격하게 정해져 있습니다(LIFO).
  • 누가 사는가?: int a = 10; 처럼 함수 안에서 선언된 지역 변수들이 잠깐 머무는 곳입니다.
  • 장점: CPU가 관여할 필요 없이, 함수가 끝나면 알아서 자동으로 청소(반납)됩니다. 속도가 엄청나게 빠릅니다.
  • 단점: 공간이 좁습니다. 너무 많은 데이터를 쌓으면 탑이 무너지는 '스택 오버플로우(Stack Overflow)' 오류가 발생합니다.

본론 2: 힙(Heap), 개발자의 자유 구역

반면 힙(Heap)은 정반대의 성격을 가집니다. 이곳은 거대한 빈 창고와 같습니다. 순서도, 규칙도 없습니다. 개발자가 원하는 크기만큼 공간을 잘라서 쓸 수 있습니다.

수동 관리의 양날의 검

C언어의 malloc() 함수나 자바의 new 키워드가 바로 이 힙 영역에 "내 땅을 달라"고 요청하는 행위입니다.

  • 특징: 데이터의 크기가 변하거나, 오랫동안 보관해야 하는 데이터를 저장합니다. (동적 할당)
  • 장점: 공간이 매우 넓고 유연합니다. 사용자가 원하는 시점에 만들고 지울 수 있습니다.
  • 치명적 단점: 스택과 달리 자동으로 청소되지 않습니다. 개발자가 다 쓰고 나서 free()로 치워주지 않으면, 쓰레기가 계속 쌓여 결국 메모리가 꽉 차버립니다. 이를 '메모리 누수(Memory Leak)'라고 하며, 시스템 다운의 주범이 됩니다.

본론 3: NASA가 스택을 사랑하는 이유

우주선 제어 시스템처럼 0.1초의 오작동도 허용되지 않는 환경에서는 힙(Heap)보다 스택(Stack)을 선호하는 경향이 있습니다. 왜 그럴까요?

힙 영역은 자유로운 대신 관리가 복잡합니다. 데이터를 썼다 지웠다를 반복하면 메모리 중간중간에 구멍이 뚫리는 '파편화(Fragmentation)' 현상이 발생하여 속도가 느려질 수 있습니다. 반면 스택은 차곡차곡 쌓고 치우기 때문에 언제나 예측 가능한 성능을 보여줍니다.

그래서 미션 크리티컬(Mission Critical)한 코드를 짤 때는 "최대한 스택을 활용하고, 힙 사용은 신중하게 하라"는 것이 엔지니어들의 철칙입니다.

결론: 정리 정돈이 성능을 결정한다

지금까지 컴퓨터가 메모리를 관리하는 두 가지 큰 축, 스택과 힙에 대해 알아보았습니다.

여러분이 작성하는 코드는 지금 어디에 저장되고 있습니까? 잠깐 쓰고 버릴 데이터라면 스택에, 오랫동안 유지하고 덩치가 큰 데이터라면 에 저장해야 합니다. 이 원리를 이해하고 코드를 작성하는 것과, 모르고 작성하는 것은 프로그램의 성능과 안정성에서 천지 차이를 만듭니다.

다음 [Part 5. 데이터 타입의 무게: 비트와 바이트의 경제학] 편에서는, 왜 정수는 4바이트이고 문자는 1바이트인지, 컴퓨터가 데이터를 규격화하는 '단위'의 비밀에 대해 심층 분석해 보겠습니다.