[Rust 공식문서 한국어 정리] 94. Rust IntoIterator 가이드
[Rust 공식문서 한국어 정리] 94. Rust IntoIterator 가이드
원문 제목: Trait std::iter::IntoIterator
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IntoIterator 트레이트가 for 루프와 반복자 사이에서 어떤 다리 역할을 하는지 설명합니다.
소유권 이전, 불변 참조, 가변 참조 세 가지 반복 방식을 학습합니다.
컬렉션 타입과 반복자 간의 변환 관계를 명확히 정리합니다.
커스텀 타입에 IntoIterator를 구현하여 for 루프와 연동하는 방법을 다룹니다.
Iterator와 IntoIterator의 차이와 협력 관계를 이해합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① IntoIterator — for 루프와 연동되는 소비 변환 트레이트
② Item 연관 타입 — 반복자가 생성하는 요소의 타입
③ IntoIter — 소유권 이전 반복자 타입
④ &T, &mut T 구현 — 참조 기반 반복 지원
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IntoIterator 트레이트는 자신을 반복자로 변환할 수 있는 타입에 구현됩니다.
for x in collection 구문은 실제로 IntoIterator::into_iter(collection)을 호출합니다.
into_iter 메서드는 self를 소비하고 Iterator를 반환합니다.
Vec에 대해 into_iter()를 호출하면 요소의 소유권이 반복자로 이전됩니다.
&Vec에 대한 IntoIterator 구현은 &T 요소를 생성하는 반복자를 반환합니다.
&mut Vec에 대한 구현은 &mut T 요소를 생성하여 값을 수정할 수 있게 합니다.
세 가지 구현으로 소유권, 읽기 전용 참조, 수정 가능 참조 반복을 모두 지원합니다.
Iterator 트레이트는 반복 상태를 유지하고 next를 제공합니다.
IntoIterator는 한 번만 호출되어 반복자를 생성하고 이후에는 Iterator가 동작을 담당합니다.
extend 메서드는 IntoIterator를 받아 컬렉션에 여러 요소를 추가합니다.
Vec::from_iter는 IntoIterator를 구현한 타입에서 Vec을 생성합니다.
.collect() 메서드도 내부적으로 IntoIterator가 구현된 타입을 대상으로 동작합니다.
커스텀 타입에 IntoIterator를 구현하면 for 루프에서 직접 사용할 수 있습니다.
구현 시 IntoIter 타입을 정의하고 Iterator 트레이트도 함께 구현해야 합니다.
라이프타임을 고려하여 참조 반복 시에는 컬렉션이 유효한 동안 반복자가 동작하도록 해야 합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
for item in vec는 소유권 이전, for item in &vec는 읽기 참조를 사용합니다.
함수 인자로 IntoIterator를 받아 다양한 컬렉션 타입을 유연하게 처리합니다.
커스텀 자료구조에 IntoIterator를 구현하면 Rust의 순환문과 자연스럽게 연동됩니다.
.into_iter()를 명시적으로 호출하여 소유권 반복이 필요한 상황을 명확히 표현합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IntoIterator는 for 루프가 어떤 타입과도 순환할 수 있게 하는 핵심 트레이트입니다.
소유권, 불변 참조, 가변 참조 세 방식의 반복을 타입 시스템으로 구분합니다.
Iterator와 IntoIterator의 분리는 반복의 초기화와 진행을 명확히 합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/std/iter/trait.IntoIterator.html
Iterator: https://doc.rust-lang.org/std/iter/trait.Iterator.html
#Rust #IntoIterator #for루프 #번역

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30