안녕하세요! 드디어 Rust의 가장 핵심이자, 많은 초보자분이 궁금해하는 **'소유권(Ownership)'**의 문턱에 오셨군요. 이름만 들으면 조금 무거워 보이지만, 사실 우리가 일상생활에서 물건을 주고받는 규칙과 아주 비슷하답니다. 겁내지 말고 저와 함께 차근차근 알아봐요!
---
상상해 보세요. 세상에 단 하나뿐인 **'마법의 황금 책'**이 있습니다. 이 책은 아주 특별해서 다음과 같은 규칙이 있어요.
1. **주인은 딱 한 명:** 이 책은 반드시 누군가가 가지고 있어야 하지만, 동시에 두 명이 가질 수는 없어요.
2. **빌려주면 내 것이 아님:** 친구에게 이 책을 완전히 넘겨주면, 이제 그 책은 친구 것이고 나는 더 이상 만질 수 없어요.
3. **주인이 사라지면 책도 소멸:** 책을 가진 주인이 방(범위)을 나가버리면, 그 책은 마법처럼 사라집니다.
Rust에서의 **소유권**은 바로 이 '마법의 책'을 관리하는 규칙이에요. 여기서 '책'은 **데이터(컴퓨터가 기억해야 할 정보)**를 의미하고, '주인'은 **변수(데이터에 붙인 이름)**를 의미합니다.
---
Rust는 이 규칙을 통해 메모리(데이터를 저장하는 컴퓨터의 공간)를 아주 깨끗하고 안전하게 관리합니다.
가장 대표적인 예시인 `String`(길이가 변할 수 있는 문자열 데이터)을 통해 확인해 보겠습니다.
{ // 스코프(변수가 유효한 범위) 시작!
let s = String::from("hello"); // s가 "hello"라는 데이터의 주인이 됩니다.
// s를 마음껏 사용합니다.
} // 스코프 끝! s라는 주인이 사라졌으므로, "hello" 데이터도 메모리에서 삭제됩니다.
가장 신기한 부분이에요. 데이터를 다른 변수에 대입하면 소유권이 통째로 넘어가 버립니다.
let s1 = String::from("hello"); // s1이 "hello"의 주인이 됩니다.
let s2 = s1; // 소유권이 s1에서 s2로 이사(Move) 갔습니다!
// println!("{}", s1); // 에러 발생! s1은 이제 주인이 아니라서 사용할 수 없어요.
println!("{}", s2); // s2가 새로운 주인이므로 아주 잘 출력됩니다!
---
다른 언어들은 컴퓨터가 알아서 쓰레기를 치워주거나(가비지 컬렉션), 사람이 직접 치워야 해요. 하지만 Rust는 이 **소유권 규칙** 덕분에:
---
| 38. 스택과 힙: 메모리 이야기 (0) | 2026.09.01 |
|---|---|
| 37. if let으로 코드 단순화하기 (0) | 2026.08.21 |
| 36. 패턴 매칭의 즐거움 (0) | 2026.08.21 |
| 35. 매치(match) 연산자 기초 (0) | 2026.08.21 |
| 34. 반복문 탈출과 계속하기 (0) | 2026.08.21 |