초급 문법 : 7. 참조와 대여 (&, &mut) – 변수를 참조하는 방법과 가변 참조
Rust의 참조와 대여 (&, &mut) 배우기
Rust에서 변수를 직접 소유하는 대신 참조하는 방법을 배우겠습니다. 참조(reference)를 사용하면 데이터의 실제 소유권을 이동하지 않고도 변수를 접근할 수 있습니다.
1. 참조란 무엇인가?
Rust에서 변수를 참조할 때 &를 사용합니다.
- 소유권을 넘기지 않고 데이터를 읽을 수 있음.
- &mut을 사용하면 데이터를 변경할 수 있음.
즉, "참조는 데이터를 직접 소유하지 않지만 접근할 수 있는 방법" 입니다.
2. VS Code에서 직접 실습하기
이제 실제로 코드를 작성하고 실행해 봅시다.
(1) VS Code에서 Rust 파일 생성
1️⃣ 터미널 열기
- VS Code를 실행하고, Ctrl + ~ (물결표) 키를 눌러 터미널을 엽니다.
- 또는 메뉴에서 [터미널] → [새 터미널] 선택하세요.
2️⃣ 새 Rust 프로젝트 생성
- 새로운 Rust 프로젝트를 만들 폴더로 이동 (예: C:\RustProjects)
cd C:\RustProjects
- 터미널에 아래 명령을 입력하고 Enter 키를 누릅니다.
- rust_reference이라는 폴더가 생성됩니다.
cargo new rust_reference
3️⃣ 프로젝트 열기
- VS Code에서 [파일] → [폴더 열기] 선택 후 rust_reference 폴더를 엽니다.
4️⃣ 메인 파일 열기
- 왼쪽 src 폴더에서 main.rs 파일을 클릭하여 엽니다.
(2) 참조 (&) 사용 예제
1) 기본 참조 (&)
fn main() {
let x = 10; // 정수형 변수 x 선언
let r = &x; // x를 참조하는 변수 r 선언
println!("x의 값: {}", x); // 직접 출력
println!("r의 값: {}", r); // 참조를 통해 출력
}
설명
- let r = &x; → x의 값을 소유하지 않고 참조만 함.
- r은 x를 읽을 수 있지만 변경할 수 없음.
실행 방법
- Ctrl + S를 눌러 파일을 저장합니다. (메뉴 -> 파일 -> 저장)
- VS Code 터미널에서 아래 명령어를 실행합니다.
cargo run
- 출력 결과 :
x의 값: 10
r의 값: 10
(3) 가변 참조 (&mut) 사용
2) 가변 참조 (&mut)
fn main() {
let mut x = 10; // 가변 변수 x 선언
let r = &mut x; // x의 가변 참조 r 선언
*r += 5; // 참조를 통해 x의 값을 변경
println!("x의 값: {}", x); // 변경된 값 출력
}
설명
- let mut x = 10; → x를 가변 변수로 선언해야 함.
- let r = &mut x; → x를 가변으로 참조함.
- *r += 5; → *r을 사용하여 x 값을 변경함.
실행 결과
x의 값: 15
3. 중요한 규칙
Rust에서는 안전한 메모리 관리를 위해 다음 규칙을 지켜야 합니다.
❌ 오류 발생하는 경우
fn main() {
let mut x = 10;
let r1 = &mut x;
let r2 = &mut x; // ❌ 동일한 가변 참조를 두 개 가질 수 없음!
println!("{} {}", r1, r2);
}
💡 해결 방법
하나의 가변 참조만 사용하도록 하기:
fn main() {
let mut x = 10;
{
let r1 = &mut x;
*r1 += 5;
} // r1의 생명주기가 끝남
let r2 = &mut x; // 새로운 가변 참조 가능
*r2 += 5;
println!("x의 값: {}", x);
}
출력 결과:
x의 값: 15
4. 정리
- & → 변수를 읽을 수 있는 불변 참조
- &mut → 변수를 변경할 수 있는 가변 참조
- 하나의 가변 참조만 허용됨!
- 불변 참조는 여러 개 가능하지만, 가변 참조와 동시에 사용 불가능.
이상으로 참조와 대여에 대해서 알아보았습니다.
[ Rust ] 러스트 프로그래밍 언어 관련 글 목록입니다.
러스트 컴퓨터 프로그래밍 언어를 아이들에게 알려주기 위해 글을 작성하고 있습니다.가능한 쉽고 자세하게 그리고 잘 따라할 수 있도록 작성해 보려고 합니다.글이 작성되는 대로 계속 추가하
hb-love-each-other.tistory.com
한국 러스트 사용자 그룹
rust-kr.org
Rust Programming Language
A language empowering everyone to build reliable and efficient software.
www.rust-lang.org
'컴퓨터에서는' 카테고리의 다른 글
[ Rust ] 초급 문법 : 8. 기본 연산자 – 산술, 비교, 논리 연산자 사용법 (0) | 2025.04.16 |
---|---|
[ Django ] 장고의 url 매칭 - 한글 오류 (공백 오류) (0) | 2025.04.04 |
티스토리에서 pdf 파일의 내용을 보여주는 방법에 대해 알아보았습니다. (2) | 2025.04.01 |
[ 자바스크립트 ] 문자열과 숫자의 형식을 변경해 보았습니다. (2) | 2025.03.31 |
[ Rust ] 초급 문법 : 0. 주석 처리 (0) | 2025.03.31 |
댓글