상세 컨텐츠

본문 제목

45. 가변 참조의 규칙

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

by 러스트코리아 2026. 9. 23. 08:54

본문

반응형

 

오늘은 러스트에서 가장 중요하면서도, 처음에는 조금 까다로울 수 있는 **'가변 참조의 규칙'**에 대해 알아볼 거예요.

 

걱정 마세요! 제가 아주 쉬운 비유로 차근차근 설명해 드릴게요. 여러분은 충분히 해낼 수 있습니다!

 

---

### 1. 가변 참조란 무엇일까요?

 

러스트에는 **'가변 참조(&mut, 값을 바꿀 수 있게 빌려오는 것)'**라는 개념이 있어요. 쉽게 말해, 친구의 공책을 빌려오는데 **"내가 내용을 고치거나 덧붙여도 돼?"**라고 허락을 받고 빌려오는 것과 같습니다.

 

하지만 공책의 내용이 엉망이 되지 않으려면 몇 가지 **'안전 규칙'**이 필요해요.

 

---

### 2. 규칙 1: "수정할 권한은 오직 한 사람에게만!"

 

만약 여러 명이 동시에 하나의 공책에 서로 다른 내용을 쓰려고 하면 어떻게 될까요? 글씨가 겹치고 내용은 엉망이 되겠죠? 이런 현상을 **데이터 경합(Data Race, 여러 곳에서 동시에 데이터를 수정하려고 해서 생기는 문제)**이라고 해요.

 

러스트는 이를 방지하기 위해 아주 엄격한 규칙을 세웠습니다.

 

> **"특정 범위(Scope, 변수가 사용되는 구역) 안에서 가변 참조는 딱 하나만 존재해야 한다!"**

 

#### 💡 코드 예제로 살펴보기

 

fn main() {
    let mut notebook = String::from("옛날 옛적에"); // 수정 가능한 공책을 만듭니다.

    let writer1 = &mut notebook; // 첫 번째 친구가 수정 권한을 빌려갔어요.
    // let writer2 = &mut notebook; // (에러!) 두 번째 친구가 또 빌리려고 하면 러스트가 막아줍니다.

    writer1.push_str(" 왕자가 살았습니다."); // 첫 번째 친구는 안전하게 글을 씁니다.
}

 

---

 

### 3. 규칙 2: "누가 읽고 있다면, 수정할 수 없어요!"

 

이번에는 누군가가 공책을 **읽고(불변 참조, &)** 있다고 생각해 보세요. 친구가 열심히 내용을 읽고 있는데, 갑자기 옆에서 누군가가 내용을 지우거나 고쳐버리면 읽고 있던 친구는 깜짝 놀라겠죠?

 

그래서 러스트는 이런 규칙도 가지고 있어요.

 

> **"누군가 데이터를 읽고 있다면, 그동안은 아무도 내용을 고칠 수 없다!"**

 

#### 💡 코드 예제로 살펴보기

fn main() {
    let mut notebook = String::from("사과"); // 수정 가능한 공책입니다.

    let reader1 = &notebook; // 친구 1이 읽기 위해 빌렸습니다.
    let reader2 = &notebook; // 친구 2도 같이 읽는 건 괜찮아요! (여러 명 읽기 가능)

    // let writer = &mut notebook; // (에러!) 누군가 읽고 있는데 수정하려고 하면 러스트가 "안 돼!"라고 외칩니다.

    println!("{}와 {}", reader1, reader2); // 읽기가 다 끝나야 안전합니다.
}

 

---

### 4. 왜 이렇게 까다롭게 구나요?

 

처음에는 이 규칙들이 조금 불편하게 느껴질 수 있어요. 하지만 이건 러스트라는 언어가 여러분의 프로그램이 **갑자기 멈추거나(Crash)**, **엉뚱한 값을 내놓는 것**을 미리 방지해 주는 **'든든한 안전 요원'** 역할을 하는 것이랍니다.

 

이 규칙 덕분에 러스트는 다른 언어들보다 훨씬 안전하고 튼튼한 프로그램을 만들 수 있어요.

 

---

### 🌟 오늘의 요약

 

1. **가변 참조(&mut)**는 데이터를 고치기 위해 빌리는 것입니다.

2. **한 번에 딱 한 명**만 고칠 권한을 가질 수 있습니다. (데이터 경합 방지)

3. **누군가 읽고 있다면 고칠 수 없습니다.** (데이터 일관성 유지)

 

처음에는 컴파일러(코드 검사기)가 내뱉는 빨간 에러 메시지에 당황할 수도 있어요. 하지만 그건 여러분의 코드를 더 완벽하게 만들어주려는 **친절한 조언**이라고 생각하세요!

반응형

관련글 더보기