Rust 튜토리얼 목차

소유권

🎯 Ownership

소유권 정의: Rust에서 각 값은 하나의 소유자를 가지며, 소유자가 범위를 벗어나면 값이 할당 해제됩니다.

소유권 이전 방법을 예제를 통해 설명합니다 (예: 값을 새 변수에 할당하거나 함수에 전달할 때).

값이 범위를 벗어날 때 자동으로 호출되는 drop 함수를 소개합니다.

소유권 정의:

Rust에서는 각 값에 대해 하나의 소유자가 존재하며, 소유자가 해당 값을 관리합니다.

소유자가 범위를 벗어나면 Rust는 자동으로 해당 값의 메모리를 해제합니다.

소유권 이전 예제:

예제 1: 값을 새 변수에 할당할 때

s1이 가리키는 값의 소유권이 s2로 이전되어 s1은 사용할 수 없습니다.

let s1 = String::from("hello");
let s2 = s1;

예제 2: 함수에 값을 전달할 때

s가 takes_ownership 함수에 전달되면서 소유권이 이전되고 함수 내에서 값의 메모리가 해제됩니다.

fn takes_ownership(s: String) {
    println!("{}", s);
}

fn main() {
    let s = String::from("hello");
    takes_ownership(s);
    // 여기에서 s는 사용할 수 없습니다.
}

drop 함수 소개:

Rust에서는 값이 범위를 벗어날 때 자동으로 drop 함수가 호출됩니다.

drop 함수는 메모리를 안전하게 해제하는 역할을 합니다.

이를 통해 개발자가 직접 메모리 해제를 관리할 필요가 없습니다.

소유권, 소유권 이전 방법, 그리고 drop 함수를 통해 Rust는 메모리 관리를 단순화하고 안전하게 할 수 있습니다.

이로 인해 메모리 누수나 세그멘테이션 폴트와 같은 문제를 효과적으로 방지할 수 있습니다.


Advanced

clone 메서드를 사용한 소유권 이전 방지

let s1 = String::from("hello"); let s2 = s1.clone();

함수로 소유권 이전 후 반환

fn takes_and_gives_back(s: String) -> String {
    s
}

fn main() {
    let s1 = String::from("hello");
    let s2 = takes_and_gives_back(s1);
    // 이제 s2를 사용할 수 있지만, s1은 여전히 사용할 수 없습니다.
}