상세 컨텐츠

본문 제목

38. 스택과 힙: 메모리 이야기

RUST 온보딩/러스트를 배우고 만들자_초보자

by 러스트코리아 2026. 9. 1. 18:32

본문

반응형

안녕하세요! 드디어 메모리라는 흥미진진한 세계에 오신 것을 환영합니다. 지금까지 코드를 짜면서 "데이터가 어디에 저장될까?"라는 궁금증이 생기지 않으셨나요?

컴퓨터는 데이터를 저장할 때 크게 두 가지 공간을 사용해요. 바로 **스택(Stack)**과 **힙(Heap)**입니다. 이 둘의 차이를 아주 쉬운 비유로 알아볼게요!

 

---

### 1. 스택(Stack): 차곡차곡 쌓는 '서류함'

스택은 도서관의 **'책상 위에 차곡차곡 쌓인 책'**이나 **'프링글스 과자 통'**과 비슷해요.

* **특징:** 마지막에 넣은 것을 가장 먼저 꺼내야 하죠. (이것을 **LIFO - Last In First Out**이라고 해요. 나중에 들어온 게 먼저 나간다는 뜻이죠!)

* **장점:** 정해진 순서대로 쌓고 치우기 때문에 속도가 **매우 빨라요.**

* **단점:** 공간이 아주 크지 않고, 넣을 데이터의 크기가 미리 딱 정해져 있어야 해요.

 

러스트에서는 숫자(`i32`)나 참/거짓(`bool`)처럼 크기가 변하지 않는 간단한 정보들을 이곳에 보관한답니다.

 

---

### 2. 힙(Heap): 넓고 자유로운 '거대한 창고'

힙은 아주 넓고 빈자리가 많은 **'거대한 물류 창고'**와 같아요.

 

* **특징:** 크기가 제각각인 짐들을 빈 공간 아무 데나 넣을 수 있어요. 대신 짐을 어디에 뒀는지 잊어버리면 안 되니까, 창고 직원이 **'주소(포인터)'**가 적힌 쪽지를 우리에게 건네줍니다.

* **장점:** 데이터의 크기가 얼마나 커질지 미리 몰라도 괜찮아요. (예: 사용자가 입력할 긴 문장 등)

* **단점:** 창고에서 물건을 찾으러 가야 하니 스택보다 **조금 느려요.**

 

러스트에서 내용이 길어질 수 있는 글자 묶음(`String`)이나 목록(`Vec`) 같은 것들은 이 힙 공간을 빌려서 사용(할당, Allocation)하게 됩니다.

---

### 3. 코드로 보는 스택과 힙

백문이 불여일견! 짧은 코드로 어떤 것이 스택에 가고, 어떤 것이 힙을 사용하는지 살펴볼까요?

 

fn main() {
    // 1. 스택에 저장되는 값
    let x = 10; // 크기가 정해진 정수는 스택(Stack)에 바로 저장돼요.

    // 2. 힙을 사용하는 값
    let s = String::from("Hello"); // "Hello"라는 글자는 힙(Heap)에 저장되고, 
                                   // s는 그 글자가 어디 있는지 알려주는 '주소록'만 스택에 가집니다.
} // 함수가 끝나면 스택에 쌓였던 x와 s의 주소록이 순식간에 사라져요! 참 깔끔하죠?

 

---

### 4. 왜 이걸 알아야 할까요?

러스트는 여러분이 메모리를 일일이 청소하지 않아도 되도록 도와주는 아주 똑똑한 언어예요. 하지만 **"스택은 빠르고 규칙적이고, 힙은 크고 자유롭다"**는 개념을 알고 있으면, 나중에 배울 '소유권(Ownership, 데이터의 주인 정하기)'이라는 핵심 개념을 훨씬 쉽게 이해할 수 있답니다.

 

처음에는 조금 낯설 수 있지만, "스택은 책상 위, 힙은 큰 창고!" 이것만 기억하세요. 여러분은 이미 훌륭한 프로그래머의 길을 걷고 계십니다.

반응형

관련글 더보기