Rust 는 GC 없이 메모리 안전성을 보장하기위한 방법으로 소유권을 사용
GC를 사용했을때의 단점을 극복하고 소유권을 문법으로 강제함으로써 메모리 안전성을 획득
소유권 규칙
- Rust 가 다루는 각각의 값은 owner 변수가 있음
- 특정 시점에 값의 owner 변수는 하나
- owner 변수가 scope 를 벗어나면 자원은 해제됨
이동 move
함수 안에서 할당받은 메모리의 경우 함수가 끝나면 자동으로 함수 scope 에서 벗어나 해제됨
하지만 함수가 끝나기전에 다른 변수로 ownser를 변경하면 자원은 그대로 유지됨
위와같이 owner 를 변경하는것을 move 라고 함
대여 borrow
owner 는 하나지만 값의 reference를 borrow 해주는건 가능
위와같이 borrow 할 때 읽기전용으로 빌려주는것을 reference 라 하고 변경가능하게 빌려주는것을 mutable reference 라고 함
빌려주는 경우는 소유권이 없으므로 scope를 벗어나더라도 변수가 reference 하는 값은 해제되지 않음
borrow 규칙
- reference 를 여러개 borrow 해주는건 가능
- mutable reference는 하나만 borrow 가능
- reference 와 mutable reference를 같은 때 동시에 borrow는 불가능
- 해제된 값의 borrow 불가능
slice type
소유권을 갖지 않는 타입
컬렉션 내의 연속된 요소들을 reference 한 타입 즉 부분참조
때문에 slice type 을 만들고 나면 이미 컬렉션에 대한 reference 가 발생했기 때문에 해당 컬렉션은 mutable reference를 가지지 못함
요약
Rust 는 위와같이 Ownership 규칙을 통해 메모리 접근을 move, borrow, slice 등으로 제한해서 Rust Program의 메모리 안전성을 컴파일 시점에 확보한다.