메모리 관리를 하던 방법
가비지 컬렉터를 통해
프로그래머가 명시적으로 할당하고 해제하는 방법을 통해
러스트는 소유권이라는 개념을 가지고 언어 자체에서 이를 관리함.
각각의 값은 소유자가 있음
소유자는 딱 하나
소유자가 스코프 밖으로 가면 버려짐
let s1 = String::from("hello");
let s2 = s1;
println!("{}, world!", s1);
s1에서 s2로 소유권을 넘겨주면 더 이상 s1에 접근 못함!
만약 둘다 할당하고 싶으면 clone 명령어를 통해서 복사본을 할당해줘야함.
함수에 값을 넣어줄때 그냥 값을 넣어주면 소유권을 함수에 할당해줘버림
함수 매개인자 값을 함수 호출 이후에도 사용하려면 함수측에서 다시 쓰는 변수까지 같이 반환 받거나 해야하는데 너무 번거롭고 별로임.
이럴떄 참조자 &를 씀. 소유권을 갖지 않고 값을 참조할수 있음. 소유권이 없어서 스코프 밖으로 벗어나도 안 버려짐.
fn main() {
let mut s = String::from("hello");
change(&mut s);
}
fn change(some_string: &mut String) {
some_string.push_str(", world");
}
기본적으로 참조자는 불변이지만 가변 참조자를 통해서 원래 변수의 수정을 할수도 있음.
그러나 가변 참조자는 한 스코프에 무조건 하나만 가능함. 또한 불변 참조자와 가변 참조자는 동시에 사용할수 없음.
굉장히 중요한 내용인거 같은데 아직 헷갈ㄹ미
'TIL' 카테고리의 다른 글
TIL 2022-08-10 HTTP STATUS 0, (0) | 2022.08.10 |
---|---|
TIL 2022-08-07 ts-node 관련, cheerio 배열 parse (0) | 2022.08.08 |
2022-07-30 WSL asdf Docker 세팅 (0) | 2022.07.31 |
TIL 2022-07-25 택배 조회 크롬 익스텐션를 위한 리서치 (0) | 2022.07.26 |
TIL 2022-07-14 Elasticsearch (0) | 2022.07.14 |