Ownership 트랙은 답답함으로 끝났어: 함수가 네 데이터를 읽게 하려면 넘겨줬다가 돌려받아야 했지. 참조가 그걸 고쳐. 참조는 소유 안 하고 값을 쓰게 해줘 — 빌리고, 보고, 자동으로 놓아줘.
& 연산자
&s 는 소유권 안 가져가고 s 로의 참조를 만들어. &s 를 함수에 넘기면 함수가 값을 빌려: 읽을 수 있지만 소유권은 호출자한테 남아. 참조가 스코프를 벗어나도 아무것도 drop 안 돼 — 빌렸을 뿐이니까.
함수 시그니처에서 빌리기
&String (더 낫게는 &str) 타입 파라미터는 '이거 소유 말고 읽고 싶어' 라고 말해. 호출이 반환된 뒤에도 호출자가 값을 유지하고. 이게 네가 계속 손 뻗을 기본값이야: 진짜로 소유권이 필요한 게 아니면 참조를 받아.
기본은 빌리기; 소유권은 꼭 필요할 때만. 대부분 함수는 데이터를 읽거나 잠깐 쓰면 돼. 참조가 정확히 그걸 말하고, 호출자의 값을 손대지 않은 채 남겨 — move 도, 돌려주려고-반환하기도 없어.
참조는 위험한 종류의 포인터가 아니야
Rust 참조는 존재하는 동안 유효한 데이터를 가리킨다고 보장돼 — 컴파일러가 증명해. null 참조도, dangling 참조도, '이거 아직 살아있나?' 도 없어. 참조는 borrow checker 가 강제하는 약속이지, 네가 돌봐야 하는 raw 주소가 아니야.