이번 편의 목표: 소유권을 넘기지 않고 값을 빌려, 함수가 호출자의 정수를 바꾸게 합니다.
&는 참조를 만듭니다. &mut는 값을 바꿀 수 있는 참조입니다. 참조를 받는 쪽에서 값을 읽거나 쓸 때는 *를 붙입니다. 빌린 값은 주인보다 오래 살 수 없습니다.
fn add_day(days: &mut i32) {
*days += 1;
}
fn main() {
let mut days = 3;
add_day(&mut days);
println!("{days}");
}출력은 4입니다. days의 소유권은 main에 있고, add_day는 잠시 가변으로 빌립니다. 함수가 끝나면 빌림도 끝납니다. 같은 값에 가변 참조는 한 번에 하나만 둡니다. 불변 참조는 여러 개를 둘 수 있습니다. 가변 참조와 불변 참조를 동시에 두지 않습니다. 읽는 동안 다른 곳이 값을 바꾸면 읽은 내용이 중간에 달라지기 때문입니다.
문자열의 소유권을 넘기지 않고 길이만 보려면 &String으로 빌립니다. 다음 편에서는 그 빌림을 더 일반적인 &str로 바꿉니다.
직접 해 보기
add_day를 두 번 호출한 뒤 days를 출력하세요. 시작이 3이면 결과는 5입니다.
해설
호출마다 1이 더해집니다. 3에서 두 번 더하면 5입니다. 두 번째 호출은 첫 번째 빌림이 끝난 뒤에 이루어지므로 가변 참조 규칙에 맞습니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.