-
[Rust] 4.ownership(3). slicerust 2023. 1. 28. 19:42반응형
Ownership Rule
- value 는 owner 로 불리는 variable을 가지고 있다.
- value의 owner에 해당하는 variable 은 하나만 존재한다.
- owner 에 해당하는 varialble 이 scope 을 벗어나면 value는 drop 된다.
이전에 ownership을 move 하지 않으면서 값을 전달하는 방법으로 value의 값만 참조하고 ownership은 갖지않는 reference 라는걸 알아봤는데 그와 비슷하게 ownership을 가지지 않는 데이터 타입으로 slice 가 있다.
let s = String::from("hello"); let slice = &s[0..2]; let slice = &s[..2]; let slice = &s[0..len]; let slice = &s[..];
rust의 .. 문법을 사용하여 다양하게 나타낼수 있고 규칙은 js의 slice 와 동일하며(시작인덱스 ~ 마지막인덱스+1) 하는일도 비슷하게 느껴지지만 이건 borrow 해온 값이기 때문에 s가 유효한 스콥내에서만 한다.
fn main() { let mut s = String::from("hello world"); let word = first_word(&s); s.clear(); // Error! println!("the first word is: {}", word); } fn first_word(s: &String) -> &str { let bytes = s.as_bytes(); for (i, &item) in bytes.iter().enumerate() { if item == b' ' { return &s[0..i]; } } &s[..] }
위 코드 에서 word 는 s의slice 된 값이다. 즉 ownership 이 없는 reference 이며 reference 는 참조하고 있는 value 가 유효해야 한다.
근데 아래줄에서 word가 사용되기 이전에 s 가 clear 되자 rust 에서는 에러는 보여준다.
'rust' 카테고리의 다른 글
[Defi] 디파이 시작해보기(1) (0) 2023.02.01 [Rust] 5. struct에 대하여 (0) 2023.01.31 [Rust] 4. ownership(2).함수와 ownership (0) 2023.01.28 [Rust] 4. ownership(1). ownership, 변수와 ownership (0) 2023.01.28 [Rust] 3. 변수, 데이터타입 (0) 2023.01.26