for
반복문을 사용 시 iter
를 왜 사용하는지에 대해 정리하는 내용이다.
fn main() {
let mut fruit_list: Vec<String> = vec![
"사과".to_string(),
"딸기".to_string(),
"포도".to_string(),
];
for fruit in fruit_list {
println!("name : {}", fruit);
}
}
위 코드의 출력물은 어떻게 될까?
#output
name : 사과
name : 딸기
name : 포도
그렇다면 fruit_list
에 추가로 배
를 넣고 싶다면??
fruit_list.push("배".to_string());
컴파일 시 borrow
관련 에러가 발생한다.
이유가 뭘까??
rust에서 for는 소유권 이동을 하면서 반복한다.
소유권을 이동시키지 않기 위해서는 iter()
를 사용해 참조 순회를 해야 한다.
for fruit in fruit_list.iter() {
println!("name : {}", fruit);
}
iter()
를 사용해 반복하게 되면 소유권을 이동시키지 않아서 반복을 완료한 이후 원하는 값을 넣어줄 수 있다.
만약 Vec
의 내부 값을 변경시키고자 한다면 iter_mut
을 활용하면 된다.
for fruit in fruit_list.iter_mut() {
println!("name : {}", fruit);
*fruit = format!("{}_반복완료", fruit.clone());
}
iter()
와 iter_mut()
을 사용하는 근본적인 이유를 알게 되었다.