Rust에서 소유권과 차용
8649 단어 rust
소개
이 글에서는 소유권과 차용이 어떻게 작동하는지, 그리고 Rust에서는 무엇인지 배우게 될 것입니다. 소유권과 차용은 가비지 수집기가 없는 Rust의 유형 안전성에서 중요한 역할을 합니다.
전제 조건
이 기사를 따라하려면 최소한 Rust에 대한 기본 지식이 있어야 하며 시스템에 Rust 프로그래밍 언어가 설치되어 있어야 합니다.
소유권
소유권은 Rust 프로그램에서 메모리 사용을 규제하는 일련의 규칙입니다. 이러한 규칙은 가비지 컬렉터가 없음에도 불구하고 Rust의 메모리 안전에 핵심입니다. 소유권은 Rust 컴파일러가 컴파일 시간에 할당된 모든 메모리를 추적하는 방법을 제공합니다.
다음은 소유권을 관리하는 규칙입니다.
소유권은 어떻게 작동합니까?
Rust에서는 다음 속성이 모든 소유자에게 적용됩니다.
소유자가 범위를 벗어나면 Rust 프로그램은 그 가치를 떨어뜨립니다. 범위 간에 변수를 공유하는 유일한 방법은 변수를 필요로 하는 함수에 해당 변수를 전달하는 것입니다.
아래 예는 실제 소유권을 보여줍니다.
fn main() {
let name = "John".to_string();
greet(name); // "name" can no longer be used in this scope after this expression
}
fn greet(name: String) {
println!("Hello, {}", name);
}
이 프로그램은 다음을 수행합니다.
welcome 함수를 호출하는 동안 name 변수에 다음과 같은 일이 발생합니다.
3행의 welcome 함수 뒤에 다른 곳에서 이름을 사용하면 프로그램이 컴파일되지 않습니다. 예를 들어 다음 코드는 컴파일되지 않습니다.
fn main() {
let name = "John".to_string();
greet(name);
println!("Name: {}", name); // <- throws an error because it is out of scope
}
fn greet(name: String) {
println!("Hello, {}", name);
}
함수에 변수를 전달하고 여전히 해당 범위에 유지하려면 값을 빌려야 합니다. 다음 섹션에서는 차용 및 작동 방식에 대해 설명합니다.
차용 및 참조
차용을 통해 함수는 다른 범위로 이동하지 않고도 변수를 참조할 수 있습니다. 차용을 사용하면 이전 함수의 범위 밖으로 이동하지 않고 함수에서 변수를 사용할 수 있습니다. 변수에 대한 참조를 얻으려면 & 단항 연산자를 사용하십시오.
fn main() {
let name = "John".to_string();
greet(&name);
println!("Name: {}", name);
}
fn greet(name: &String) {
println!("Hello, {}", name);
}
위의 Rust 프로그램은 다음을 수행합니다.
위의 welcome 함수에서 함수 범위의 일부인 것처럼 name 변수의 값에 액세스할 수 있습니다. Rust의 & 연산자를 사용하면 다른 함수 범위에서 변수를 참조할 수 있습니다.
함수 인수에서 데이터 유형 지정 앞에 &(앰퍼랜드) 기호를 추가하여 인수가 참조임을 지정합니다.
fn greet(name: &String) {
변경 가능한 참조
함수에 대한 참조를 전달하면 해당 참조를 변경할 수 없습니다. 함수에 변경 가능한 참조를 전달하지 않는 한. 예를 들어 다음 코드는 컴파일되지 않습니다.
fn main() {
let greeting = "Hello, ".to_string();
add_name(&greeting);
println!("{}!", greeting);
}
fn add_name(greeting: &String) {
greeting.push_str("John");
}
위의 예제가 작동하려면 변경 가능한 참조를 사용해야 합니다.
fn main() {
let mut greeting = "Hello, ".to_string();
add_name(&mut greeting);
println!("{}!", greeting);
}
fn add_name(greeting: &mut String) {
greeting.push_str("John");
}
변경 사항은 다음과 같습니다.
변경 가능한 참조를 사용하면 함수가 해당 범위에서 변수를 차용하고 변경할 수 있습니다.
결론
이 문서에서는 소유권 및 차용이 작동하는 방식과 이를 사용하는 방법에 중점을 둡니다. 다음은 주제에 대한 지식을 넓히는 데 도움이 될 수 있습니다.
Reference
이 문제에 관하여(Rust에서 소유권과 차용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ghoulkingr/ownership-and-borrowing-in-rust-2imh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)