상세 컨텐츠

본문 제목

39. Rust의 심장: 소유권이란?

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

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

본문

반응형

안녕하세요! 드디어 Rust의 가장 핵심이자, 많은 초보자분이 궁금해하는 **'소유권(Ownership)'**의 문턱에 오셨군요. 이름만 들으면 조금 무거워 보이지만, 사실 우리가 일상생활에서 물건을 주고받는 규칙과 아주 비슷하답니다. 겁내지 말고 저와 함께 차근차근 알아봐요!

---

### 1. 소유권이 대체 뭔가요? (비유로 이해하기)

 

상상해 보세요. 세상에 단 하나뿐인 **'마법의 황금 책'**이 있습니다. 이 책은 아주 특별해서 다음과 같은 규칙이 있어요.

 

1. **주인은 딱 한 명:** 이 책은 반드시 누군가가 가지고 있어야 하지만, 동시에 두 명이 가질 수는 없어요.

2. **빌려주면 내 것이 아님:** 친구에게 이 책을 완전히 넘겨주면, 이제 그 책은 친구 것이고 나는 더 이상 만질 수 없어요.

3. **주인이 사라지면 책도 소멸:** 책을 가진 주인이 방(범위)을 나가버리면, 그 책은 마법처럼 사라집니다.

 

Rust에서의 **소유권**은 바로 이 '마법의 책'을 관리하는 규칙이에요. 여기서 '책'은 **데이터(컴퓨터가 기억해야 할 정보)**를 의미하고, '주인'은 **변수(데이터에 붙인 이름)**를 의미합니다.

 

---

### 2. 소유권의 세 가지 황금 규칙

Rust는 이 규칙을 통해 메모리(데이터를 저장하는 컴퓨터의 공간)를 아주 깨끗하고 안전하게 관리합니다.

1. Rust의 모든 값은 **소유자(Owner)**라고 불리는 변수가 있어요.

2. 소유자는 **한 번에 딱 하나**만 존재할 수 있어요.

3. 소유자가 **스코프(Scope, 변수가 살아있는 범위)** 밖으로 벗어나면, 그 값은 자동으로 제거됩니다.

---

### 3. 코드로 직접 확인해봐요!

 

가장 대표적인 예시인 `String`(길이가 변할 수 있는 문자열 데이터)을 통해 확인해 보겠습니다.

#### 예제 1: 주인이 사라지면 데이터도 안녕!

{ // 스코프(변수가 유효한 범위) 시작!
    let s = String::from("hello"); // s가 "hello"라는 데이터의 주인이 됩니다.
    // s를 마음껏 사용합니다.
} // 스코프 끝! s라는 주인이 사라졌으므로, "hello" 데이터도 메모리에서 삭제됩니다.

 

#### 예제 2: "내 건 이제 네 거야!" (소유권 이전)

가장 신기한 부분이에요. 데이터를 다른 변수에 대입하면 소유권이 통째로 넘어가 버립니다.

let s1 = String::from("hello"); // s1이 "hello"의 주인이 됩니다.
let s2 = s1; // 소유권이 s1에서 s2로 이사(Move) 갔습니다!

// println!("{}", s1); // 에러 발생! s1은 이제 주인이 아니라서 사용할 수 없어요.
println!("{}", s2); // s2가 새로운 주인이므로 아주 잘 출력됩니다!

 

---

### 4. 왜 이런 귀찮은 규칙이 있나요?

다른 언어들은 컴퓨터가 알아서 쓰레기를 치워주거나(가비지 컬렉션), 사람이 직접 치워야 해요. 하지만 Rust는 이 **소유권 규칙** 덕분에:

* **메모리 낭비가 없어요: ** 주인이 사라지자마자 바로 치우니까요.

* **안전해요:** 한 데이터를 여러 명이 동시에 고치려다 발생하는 사고를 원천 봉쇄합니다.

---

 

### 💡 오늘의 응원 한마디! 처음에는 "내 변수를 내 맘대로 못 써?"라고 답답하실 수 있어요. 하지만 이건 Rust가 여러분의 프로그램이 중간에 멈추거나 망가지지 않도록 미리 지켜주는 **'강력한 보호막'**이랍니다.

반응형

관련글 더보기