rust `into_iter()` vs `iter_mut()`

agnusdei·2025년 2월 5일

into_iter() vs iter_mut()

  • into_iter()소유권을 넘기면서 이터레이터를 반환합니다. 즉, 원본 컬렉션의 소유권이 이터레이터로 이동하므로, 이후에 원본 컬렉션을 사용할 수 없습니다.
  • iter_mut()가변 참조를 이용하여, 컬렉션을 수정할 수 있는 이터레이터를 반환합니다. 소유권을 이동시키지 않고, 원본 컬렉션에 대한 참조를 통해 요소를 수정할 수 있습니다.

1. into_iter()

into_iter()소유권을 이동시키는 방식입니다. 따라서 이 메서드를 호출한 후에는 해당 컬렉션을 더 이상 사용할 수 없습니다.

fn main() {
    let v = vec![1, 2, 3];

    // 소유권을 넘김
    for num in v.into_iter() {
        println!("{}", num); // 1 2 3
    }

    // println!("{:?}", v); // ❌ 에러! (소유권이 이동했음)
}
  • into_iter()컬렉션의 소유권을 넘기고, 컬렉션을 소비합니다. 즉, 이후 원본 벡터 v는 사용할 수 없습니다.

2. iter_mut()

iter_mut()가변 참조를 통해 원본 컬렉션을 수정할 수 있는 이터레이터를 반환합니다. 소유권을 넘기지 않으므로, 원본 컬렉션을 계속 사용할 수 있습니다.

fn main() {
    let mut v = vec![1, 2, 3];

    // 가변 참조를 사용하여 요소를 수정
    for num in v.iter_mut() {
        *num *= 2;  // 요소를 직접 수정
    }

    println!("{:?}", v); // [2, 4, 6]
}
  • iter_mut()컬렉션의 요소를 가변 참조로 수정하지만, 소유권을 이동시키지 않음. 따라서 수정된 후에도 원본 컬렉션을 계속 사용할 수 있습니다.

핵심 차이점 정리

  1. into_iter(): 소유권을 이동시키고, 이후에 원본 컬렉션을 사용할 수 없음.
    • 예시: vec.into_iter()
  2. iter_mut(): 가변 참조를 이용해 컬렉션을 수정할 수 있으며, 소유권은 이동하지 않음.
    • 예시: vec.iter_mut()

📌 요약

  • into_iter()소유권을 넘기며 값을 순회하고,
  • iter_mut()가변 참조를 이용하여 원본 컬렉션을 수정하지만 소유권은 이동시키지 않습니다.
profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글