Rust 언어의 소유권 시스템은 메모리 안전성과 동시성을 보장하기 위해 설계된 고유한 기능입니다. 이 시스템은 Rust 코드에서 객체의 소유권을 추적하여 런타임 오류인 "null pointer dereference"와 "dangling pointer"같은 일반적인 메모리 오류를 방지합니다.
Rust에서 모든 객체는 변수에 바인딩되어 있으며, 각 변수는 그 객체의 소유자입니다.
이렇게 소유권이 지정된 객체는 다른 스코프로 전달될 때 소유권이 이전됩니다. 이를 "move"라고 부릅니다. 이렇게 소유권을 이전함으로써 객체의 수명을 추적하고, 객체에 대한 메모리 할당과 해제를 자동으로 처리할 수 있습니다.
또한, Rust에서는 불변 참조와 가변 참조를 구분합니다.
불변 참조는 객체의 소유권을 넘기지 않고도 객체를 읽을 수 있게 합니다. 반면에 가변 참조는 객체의 소유권을 넘기지 않더라도 객체를 수정할 수 있습니다. 이를 통해 Rust는 멀티스레딩을 비롯한 동시성 처리에서도 안전한 코드를 작성할 수 있도록 지원합니다.
Rust의 소유권 시스템은 개발자가 메모리 안전성을 보장하면서도 유연하고 효율적인 코드를 작성할 수 있도록 합니다. 이는 Rust의 안정성과 성능 향상에 큰 기여를 하고 있습니다.
불변참조와 가변참조 란?
Rust에서는 불변 참조와 가변 참조를 사용하여 객체에 대한 참조를 다룹니다.
불변 참조는 객체를 읽을 수만 있고 수정할 수 없습니다. 반면에 가변 참조는 객체를 읽고 수정할 수 있습니다. 이를 코드로 예시로 보면 다음과 같습니다.
// 불변 참조
fn print_name(name: &str) {
println!("Name: {}", name);
}
// 가변 참조
fn append_suffix(name: &mut String, suffix: &str) {
name.push_str(suffix);
}
fn main() {
// 불변 참조를 사용하여 문자열을 읽기만 할 수 있습니다.
let name = String::from("John");
print_name(&name);
// 가변 참조를 사용하여 문자열을 수정할 수 있습니다.
let mut name_with_suffix = String::from("John");
append_suffix(&mut name_with_suffix, " Doe");
println!("Name with suffix: {}", name_with_suffix);
}
위 코드에서 print_name 함수는 &str 타입의 불변 참조를 인자로 받아 문자열을 읽기만 할 수 있습니다.
반면에 append_suffix 함수는 &mut String 타입의 가변 참조를 인자로 받아 문자열을 수정할 수 있습니다.
main 함수에서는 print_name 함수를 호출할 때 &name을 인자로 전달합니다. 이는 name 변수의 불변 참조를 전달하는 것입니다.
반면에 append_suffix 함수를 호출할 때는 &mut name_with_suffix를 인자로 전달합니다. 이는 name_with_suffix 변수의 가변 참조를 전달하는 것입니다. append_suffix 함수는 이 가변 참조를 통해 문자열에 접근하고 수정합니다.
이렇게 Rust에서는 불변 참조와 가변 참조를 구분하여 객체에 대한 접근을 제어합니다. 이를 통해 객체의 안전한 동시 접근을 가능케 하고 메모리 안전성을 보장합니다.
'Programming > Rust' 카테고리의 다른 글
Rust 매크로 macro_rules! (0) | 2023.03.15 |
---|---|
Rust trait - 인터페이스?, 추상클래스? (0) | 2023.03.14 |
Rust 의 type : Some 에 대해.. (0) | 2023.03.10 |
maturin, PyO3 - Rust 를 Python 에서 사용하자 (0) | 2023.03.09 |
Rust 시작하기 (0) | 2023.03.08 |
댓글