본문 바로가기
개발/러스트 (Rust)

Rust 기본, 소유권 (Ownership)

by 레조 2024. 7. 3.

https://rustacean.net/

 

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
}