Rust

[Rust] 소유권(Ownership)

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의 메모리 안전성을 컴파일 시점에 확보한다.