오늘은 Rust가 왜 그렇게 안전하고 효율적인지 알려주는 핵심 비결 중 하나인 **'변수의 범위와 메모리 해제'**에 대해 알아볼 거예요. 이름은 조금 어려워 보이지만, 비유를 통해 아주 쉽게 설명해 드릴게요!
---
여러분, 연극을 상상해 보세요. 배우가 무대 위에 등장해서 연기를 하다가, 자기 차례가 끝나면 무대 뒤로 사라지죠?
Rust에서 변수도 똑같아요. 변수가 태어나서 활동할 수 있는 **'무대'**가 정해져 있는데, 이 무대를 **범위(Scope, 변수가 살아있는 영역)**라고 불러요.
Rust에서는 중괄호 `{ }`가 바로 무대의 시작과 끝을 알리는 표시랍니다.
fn main() { // 메인 무대 시작
{ // 작은 무대 시작
let x = 5; // x라는 배우가 작은 무대에 등장!
println!("{}", x); // x가 대사를 읊어요 (출력)
} // 작은 무대 끝! x는 여기서 무대 뒤로 퇴장해요.
// println!("{}", x); // 에러! x는 이미 퇴장해서 여기엔 없거든요.
} // 메인 무대 끝
---
컴퓨터의 **메모리(Memory, 데이터를 저장하는 임시 작업 공간)**는 마치 공연장의 '의자'와 같아요. 배우(변수)가 앉으려면 의자가 필요하죠. 하지만 공연장의 의자 개수는 정해져 있어요.
만약 퇴장한 배우들이 의자를 계속 차지하고 있다면, 나중에는 새로운 배우가 앉을 자리가 없겠죠? 그래서 Rust는 배우가 무대 밖으로 나가는 순간(범위를 벗어나는 순간), 그 배우가 썼던 의자를 즉시 치워버립니다. 이것을 **메모리 해제(Drop, 사용하던 공간을 컴퓨터에게 돌려줌)**라고 해요.
fn main() {
let s = String::from("hello"); // s라는 변수가 메모리(의자)를 차지하며 등장!
// ... s를 가지고 즐겁게 코딩하기 ...
} // s의 범위가 여기서 끝나요!
// Rust는 여기서 자동으로 s가 썼던 메모리를 깨끗하게 치워줍니다. (Drop!)
* **메모리 해제(Drop):** 변수가 더 이상 필요 없어질 때, 차지하던 메모리를 자동으로 반납하는 과정이에요.
---
다른 프로그래밍 언어들은 이 '의자 치우기(메모리 해제)'를 깜빡해서 컴퓨터가 느려지거나, 청소부가 뒤늦게 나타나 한꺼번에 치우느라 공연이 잠시 멈추기도 해요.
하지만 **Rust는 배우가 퇴장하는 문 앞에 서 있다가, 발을 떼는 그 순간 바로 의자를 치워버려요.** 덕분에 메모리가 낭비되지도 않고, 프로그램이 멈칫거리지도 않는답니다! 정말 대단하죠?
--- ### 🌟 요약하자면!
1. **범위(Scope):** 변수는 자신이 태어난 `{ }` 안에서만 살 수 있어요.
2. **메모리 해제(Drop):** 변수가 `{ }`를 벗어나면, Rust가 자동으로 그 변수가 쓰던 메모리를 청소해 줘요.
3. **장점:** 여러분이 일일이 "이제 이 변수 안 써요!"라고 말하지 않아도 Rust가 알아서 해주니 안전하고 편리해요.
| 42. 복사(Copy)와 클론(Clone) (0) | 2026.09.14 |
|---|---|
| 41. 이동(Move) 현상 이해하기 (0) | 2026.09.08 |
| 39. Rust의 심장: 소유권이란? (0) | 2026.09.01 |
| 38. 스택과 힙: 메모리 이야기 (0) | 2026.09.01 |
| 37. if let으로 코드 단순화하기 (0) | 2026.08.21 |