소유권 규칙
- Rust의 각각의 값은 해당 값의 오너(owner)라고 불리는 변수를 갖고 있다.
- 한 번에 딱 하나의 오너만 존재할 수 있다.
- 오너가 스코프 밖으로 벗어나는 때, 값은 버려진다(dropped).
변수의 스코프
{ // s는 유효하지 않습니다. 아직 선언이 안됐거든요.
let s = "hello"; // s는 이 지점부터 유효합니다.
// s를 가지고 뭔가 합니다.
} // 이 스코프는 이제 끝이므로, s는 더이상 유효하지 않습니다.
String 타입
- 스트링 리터럴은 불변!
String
타입의 인스턴스는 가변!
let mut s = String::from("hello");
s.push_str(", world!"); // push_str()은 해당 스트링 리터럴을 스트링에 붙여줍니다.
println!("{}", s); // 이 부분이 `hello, world!`를 출력할 겁니다.
메모리 할당
{
let s = String::from("hello"); // s는 여기서부터 유효합니다
// s를 가지고 뭔가 합니다
} // 이 스코프는 끝났고, s는 더 이상
// 유효하지 않습니다
변수와 데이터가 상호작용하는 방법: 이동(move)
let x = 5;
let y = x;
let s1 = String::from("hello");
let s2 = s1;