rust for 반복문 소유권 이동

wangki·2025년 2월 8일
0

Rust

목록 보기
19/54

개요

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()을 사용하는 근본적인 이유를 알게 되었다.

0개의 댓글