Rust 기본 : 참조 (Borrow)
Borrow는, 참조를 생성하는 것입니다.
- 참조는 규칙이나 제한이 있는 포인터입니다.
- 참조는 소유권을 가지지 않습니다.
"borrow"는 참조를 생성하고 그 참조를 통해 데이터를 안전하게 사용할 수 있도록 하는 Rust의 규칙과 메커니즘을 포함하는 더 포괄적인 용어로 이해할 수 있습니다. 그래서 단순히 "reference"라고 하는 것과는 조금 다른 측면이 있습니다. |
Borrow를 참조로 읽으면 혼동이 덜하다.
특히 C++ 사용자의 경우, Borrow는 참조(reference)에 약간의 규칙이 있다고 생각하면 쉽다.
참조(Borrow) 사용하는 이유?
- 성능을 위해서.
- 소유권이 필요하지 않거나 원하지 않을 때.
참조(Borrow) 규칙.
1. 어느 시점에서든 하나의 가변 참조 또는 여러 개의 불변 참조를 가질 수 있습니다.
2. 참조는 항상 유효해야 합니다.
이 규칙이 해결하는 문제.
- 규칙1은 데이터 경쟁을(동시 접근) 방지.
- 규칙2는 유효하지 않은 메모리 참조 방지.
불변 참조 (Immutable Reference)
// 불변 참조 (Immutable Reference)
fn main() {
let mut str1 = String::from("modifiable");
let str2 = String::from("fixed string");
let mut str_ptr: &String; // 불변 String 타입에 대한 가변 참조.
str_ptr = &str1;
println!("ptr currently points to {str_ptr}");
str_ptr = &str2;
println!("ptr currently points to {str_ptr}");
str1.push_str(" string");
str_ptr = &str1;
println!("ptr currently points to {str_ptr}");
}
가변 참조 (Mutable Reference)
// 가변 참조 (Mutable Reference)
fn main() {
let mut str1 = String::from("Rust");
let mut str2 = String::from("Golang");
let ref1 = &mut str1; // 가변 String 타입에 대한 불변 참조.
let mut ref2 = &mut str2; // 가변 String 타입에 대한 가변 참조.
println!("First string: {ref1}");
println!("Second string: {ref2}");
ref1.push('🦀');
ref2.push('🦫');
println!("Modified first string: {ref1}");
println!("Modified second string: {ref2}");
// 규칙1: 하나의 가변 참조만 가질 수 있다.
// (only one mutable reference allowed at a time, ref1 is no longer valid.)
ref2 = &mut str1;
// println!("ref1 is no longer valid: {ref1}");
}
'개발 > 러스트 (Rust)' 카테고리의 다른 글
Rust 기본, 구조체 (Struct) (0) | 2024.07.24 |
---|---|
Rust 기본, to_string() vs to_owned() (0) | 2024.07.20 |
Rust 기본 : UTF-8 문자열 (Strings) (0) | 2024.07.17 |
Rust 기본, 슬라이스 (Slice) (0) | 2024.07.14 |
Rust 기본, 소유권 (Ownership) (0) | 2024.07.06 |
Rust 기본, OBRM vs RAII (0) | 2024.07.06 |
Rust 기본, 주석 Comment. (0) | 2024.07.06 |
Rust 기본, 제어 흐름 Control Flow. (if else, loop, while, for) (0) | 2024.07.06 |