본문 바로가기
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
BIG

'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

댓글