[Rust/러스트] 참조자(References)와 빌림(Borrowing)
2022. 2. 17. 15:20ㆍProgramming Language/Rust
반응형
■ 참조자와 빌림
참조자와 빌림은 해당 스코프에서 다른 로직으로 소유권을 넘기지 않고 참조자를 넘김으로써 소유권을 유지하고자 할 때 사용합니다.
여기에서 소유권이 생소하게 느껴질 수 있습니다. 러스트는 다른 프로그래밍 언어들과 비교하면 소유권이라는 특징으로 보다 효율적으로 메모리 관리가 가능합니다. 이러한 특징은 프로그래머의 메모리 관리를 통해 프로그램을 보다 효율적으로 관리 가능하게 합니다.
* 소유권에 대한 자세한 내용은 링크를 참고해 주세요.
◆ 소유권의 이동 경로 확인
변수 s 의 소유권 이동경로는 아래와 같습니다.
- main 함수
- take_ownership 함수
- take_ownership 함수 로직이 종료되면서 s의 메모리도 해제
s의 소유권 이동 경로에서 알 수 있듯이 println!("main fn : {}", s) 에서는 s의 소유권이 main 함수 스코프에 없기 때문에 borrow of moved value: `s` 에러가 발생합니다.
fn take_ownership(s : String){
println!("take_ownership fn : {}", s);
}// 스코프 밖으로 벗어나면서 s의 메모리는 해제된다.
fn main(){
let s = String::from("Owner Check");
// s 에 소유권를 take_ownership 함수 스코프로 이동시킴
take_ownership(s);
// 에러 발생
println!("main fn : {}", s);
}
◆ 참조자와 빌림으로 소유권 유지
s 변수의 소유권을 main 스코프에서 유지하면서 println!("main fn : {}", s) 를 정상적으로 실행 시킬 수 있는 방법은 참조자(&)를 활용하여 기존 스코프에서 소유권을 유지하는 것입니다.
fn take_ownership(s : &String){
println!("take_ownership fn : {}", s);
}
fn main(){
let s = String::from("Owner Check");
// s 의 참조자를 take_ownership에 매개변수로 넘김
take_ownership(&s);
// s 의 소유권 유지
println!("main fn : {}", s);
}
▶ 출력 결과
take_ownership fn : Owner Check
main fn : Owner Check
반응형
'Programming Language > Rust' 카테고리의 다른 글
[Rust/러스트] 구조체의 메소드, 연관함수 (0) | 2022.02.17 |
---|---|
[Rust/러스트] 구조체(struct) 정리 (0) | 2022.02.17 |
[Rust/러스트] 소유권(Owner) (0) | 2022.02.17 |
[Rust/러스트] 반복문 정리 (0) | 2022.02.16 |
[Rust/러스트] 조건문 정리 (0) | 2022.02.16 |