Rust 기본 : 소유권 (Ownership)
소유권이란,
메모리 및 기타 자원을 관리하기 위한 전략이다.
컴파일 시간에 체크하는 규칙들이 있다.
규칙:
1. 러스트에서 각 값은 '소유자'라고 불리는 변수를 가집니다.
2. 한 번에 하나의 소유자만 있을 수 있습니다.
3. 소유자가 유효 범위를 벗어나면, 그 값은 삭제됩니다.
소유권이 해결하는 문제
1. 메모리/리소스 누수 문제.
2. 이중 해제 문제.
3. 해제 후 사용 문제.
변수에서의 소유권 이동.
fn main() {
// 규칙 1 : 러스트에서 각 값은 '소유자'라고 불리는 변수를 가진다. s1, s2, s3.
let s1 = String::from("Rust"); // heap allocated string.
// 규칙 2 : 한 번에 하나의 소유자만 있을 수 있다.
let s2 = s1.clone(); // 클론하여 소유권 이동 방지.
println!("s1 is: {:p}", &s1);
println!("s2 is: {:p}", &s2);
// 규칙 3 : 소유자가 범위를 벗어나면, 그 값은 삭제된다.
{
let s3 = String::from("Inner Rust");
} // s3 메모리 해제. (drop)
}
함수에서의 소유권 이동.
fn main() {
let s1 = String::from("Rust"); // heap allocated string
let s2 = add_to_string(s1); // 소유권 이동: s1 -> 함수인자 mut s3 -> s2 (리턴)
//println!("s1 is: {s1}"); // 소유권 이동으로 인해 s1은 더이상 유효하지 않다. (규칙2)
println!("s2 is: {s2}");
}
fn add_to_string(mut s3: String) -> String {
s3.push_str(" is awesome!");
s3
}
'개발 > 러스트 (Rust)' 카테고리의 다른 글
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 기본, 참조 (Borrow) (0) | 2024.07.09 |
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 |
Rust 기본, 함수 (Functions) (0) | 2024.07.06 |