본문 바로가기
Programming/Rust

Rust 의 소유권(ownership)이란?

by Chan_찬 2023. 3. 13.
728x90

Rust 소유권?

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에서는 불변 참조와 가변 참조를 구분하여 객체에 대한 접근을 제어합니다. 이를 통해 객체의 안전한 동시 접근을 가능케 하고 메모리 안전성을 보장합니다.

728x90
728x90

'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
Buy me a coffeeBuy me a coffee

댓글