Languages/RUST

[Rust] Borrowing 이란? (feat. reference)

MOONCO 2023. 7. 15. 16:53

선행 지식

 

[Rust] 소유권 - 메모리 관리 이야기 (feat. Garbage Collector)

서문 Rust에는 소유권이라는 개념이 있는데, 이는 Rust에만 존재하는 고유한 특성이다. 이 글에서는 소유권이란 것이 무엇인지 뿐만아니라, 어떤 상황에서 사용하는지, 왜 등장하게 되었는지 등

defineall.tistory.com

 

Borrowing 이란?

의미 : 소유권을 가지고 있는 변수의 데이터를 빌리는 것

실제 : 소유권을 가지고 있는 변수의 메모리주소를 저장하는 것

 

 

배경

 

Rust의 변수는,

스코프를 벗어난 이후에도 메모리 공간을 OS에게 돌려주지(drop) 않도록 하기 위해

자동으로 drop 되지 않도록, 매번 수동으로 소유권을 옮겨(move)주어야 한다.

 

이 때문에, 굳이 drop 할 필요가 없는 작업들에서도,

일일히 move 해주어야 하는 번거로움이 발생한다.

 

이를 해결하기 위해, (scope 를 벗어나더라도, 데이터를 drop하지 않도록 하기 위해서)

소유권을 가진 변수의 주소를 저장해 Reference 를 만들었다.

 

Reference 를 만드는 작업이 데이터를 빌리는 것 처럼 보여서

borrowing 이라고 부른다.

 

 

Mutable Reference

 

하나의 메모리를 여러곳에서 변경하고 싶다면,

변경하기 전에, 이미 수행중인 작업이 없는지 무조건 확인해야한다.

이미 작업중인 메모리를 변경해 버린다면, 

작업끼리 충돌이 발생하여, 개발자가 예상할 수 없는 에러가 발생한다.

 

기존의 프로그래밍언어에서,

메모리 작업을 확인하는 것은 개발자의 몫이였는데,

실제 실행환경(runtime)에서 이러한 오류를 잡아내어야 해서

에러를 발견하기도 어렵고, 

발견되었다 하더라도 추적이 어려웠다.

 

Rust는 이에 강제성을 부여해, compile time 에러를 발생시킴으로써

개발자가 이러한 오류를 쉽고 빠르게 발견할 수 있도록 해준다.

 

 

 

 

반응형