5. Rust 소유권 이해
Rust의 소유권(Ownership)은 Rust가 다른 언어와 구분돼 갖는 가장 큰 특징 중 하나 입니다. 이 개념은 Rust를 다른 시스템 프로그래밍 언어와 구별되게 만드는 중요한 특징 중 하나입니다.
소유권의 세 가지 규칙
- 각 값은 소유자(owner)를 가집니다.
- 값은 하나의 소유자만 가질 수 있습니다.
- 소유자가 범위를 벗어나면 값은 즉시 소멸됩니다.
소유권의 작동 방식
- 값이 함수로 전달되거나 변수 간에 이동될 때, 이 값은 소유권이 이전되어야 합니다.
- 값이 소유권이 이전된 후에는 이전한 변수를 사용할 수 없습니다.
소유권의 이동과 복사
- 값이 이동될 때는 기존 변수는 사용할 수 없게 됩니다.
- 복사를 원할 경우
clone()
메서드를 사용하여 복사해야 합니다.
1
2
3
4
5
6
fn main() {
let s1 = String::from("hello");
let s2 = s1; // s1의 값이 s2로 이동됨
println!("{}", s1); // 컴파일 에러 발생!
}
소유권의 반환
- 함수에서 값이 반환될 때, 해당 값은 함수 내부에서 소유권을 이전받는 변수가 됩니다.
- 값이 반환된 후에는 이전 변수를 다시 사용할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
fn do_stuff(s: String) -> String {
// s를 가공하거나 다른 작업을 수행
s
}
fn main() {
let s1 = String::from("hello");
let s2 = do_stuff(s1); // s1의 소유권이 do_stuff 함수로 이동됨
println!("{}", s1); // 컴파일 에러 발생!
}
This post is licensed under CC BY 4.0 by the author.