0Pricing
Learn Rust Coding · 강의

어댑터와 소비자

연산 연결하기

어댑터와 소비자은(는) CoddyKit의 무료 Learn Rust Coding 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn Rust Coding 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.

두 종류의 메서드

반복자 메서드는 두 그룹으로 나뉩니다.

  • 어댑터는 새 반복자를 반환하며 지연 방식으로 동작합니다(map, filter, take)
  • 소비자는 반복자를 실행하고 최종 값을 생성합니다(sum, collect, for_each)

모든 파이프라인은 0개 이상의 어댑터 뒤에 정확히 하나의 소비자가 오는 구조입니다.

take: 개수 제한하기

take(n)은 최대 n개의 항목을 생성한 다음 멈춥니다. 어댑터이므로 지연 방식으로 동작합니다.

무한 반복자에서도 사용할 수 있으며, 요청한 만큼만 가져옵니다.

fn main() {
    let first_three: Vec<i32> = (1..).take(3).collect();
    println!("{:?}", first_three);
}

skip: 처음 항목 무시하기

skip(n)은 처음 n개의 항목을 버리고 나머지를 생성합니다. take과 함께 사용하면 중간 부분의 구간을 가져올 수 있습니다.

fn main() {
    let window: Vec<i32> = (1..=10).skip(3).take(4).collect();
    println!("{:?}", window);
}

enumerate: 인덱스와 묶기

enumerate는 0부터 세면서 (index, value) 튜플을 생성합니다. 수동 카운터 없이 위치를 얻는 관용적인 방법입니다.

fn main() {
    let letters = vec!['a', 'b', 'c'];
    for (i, c) in letters.iter().enumerate() {
        println!("{} -> {}", i, c);
    }
}

zip: 두 반복자를 함께 순회하기

zip은 두 반복자의 항목을 쌍으로 묶습니다. 더 짧은 반복자의 항목이 모두 소진되면 멈춥니다.

이름과 점수처럼 나란히 대응하는 데이터를 결합할 때 유용합니다.

fn main() {
    let names = vec!["Ana", "Ben"];
    let ages = vec![30, 25];
    for (name, age) in names.iter().zip(ages.iter()) {
        println!("{} is {}", name, age);
    }
}

rev: 순서 뒤집기

rev는 항목을 뒤에서부터 생성합니다. 범위와 슬라이스가 제공하는 양방향 반복자가 필요합니다.

fn main() {
    let backwards: Vec<i32> = (1..=5).rev().collect();
    println!("{:?}", backwards);
}

chain: 두 반복자 이어 붙이기

chain은 첫 번째 반복자를 끝까지 실행한 다음 두 번째 반복자를 이어서 실행하며, 두 반복자를 하나의 시퀀스처럼 처리합니다.

fn main() {
    let joined: Vec<i32> = (1..=3).chain(10..=12).collect();
    println!("{:?}", joined);
}

fold: 하나의 값 만들기

fold는 일반적인 소비자입니다. 누산기에서 시작해 클로저를 사용하여 각 항목을 누산기에 접어 넣습니다.

sum과 같은 많은 소비자는 fold의 특수한 경우입니다.

fn main() {
    let product = (1..=5).fold(1, |acc, x| acc * x);
    println!("5! = {}", product);
}

any와 all: 불리언 소비자

any는 하나 이상의 항목이 조건식을 만족하면 true를 반환하고, all은 모든 항목이 만족할 때만 true를 반환합니다.

둘 다 답을 알 수 있는 즉시 중단하는 단락 평가를 사용합니다.

fn main() {
    let nums = vec![2, 4, 6, 7];
    println!("{}", nums.iter().all(|x| x % 2 == 0));
    println!("{}", nums.iter().any(|x| x % 2 != 0));
}

find와 position

find는 조건식과 일치하는 첫 번째 항목을 Option으로 반환합니다. 반면 position은 첫 번째 일치 항목의 인덱스를 반환합니다.

둘 다 첫 번째 일치 항목을 찾으면 즉시 중단합니다.

fn main() {
    let nums = vec![1, 3, 5, 8, 9];
    println!("{:?}", nums.iter().find(|&&x| x % 2 == 0));
    println!("{:?}", nums.iter().position(|&x| x % 2 == 0));
}

파이프라인 설계하기

어댑터를 차례로 쌓고 마지막에 하나의 소비자를 배치해 파이프라인을 만드세요. 한 줄에 하나의 작업만 작성해 읽기 쉽게 유지하세요.

어댑터는 지연 방식으로 동작하므로 체인이 길어도 데이터를 한 번만 순회합니다.

빠른 확인

어댑터와 소비자를 구분해 보세요.

복습

연산을 연결하는 방법을 살펴보았습니다.

  • 어댑터(take, skip, enumerate, zip, rev, chain)는 지연 방식으로 동작합니다
  • 소비자(fold, any, all, find, position)가 작업을 완료합니다
  • 불리언 소비자와 검색 소비자는 단락 평가를 사용합니다
  • 모든 파이프라인은 어댑터 뒤에 하나의 소비자가 오는 구조입니다

자주 묻는 질문

“어댑터와 소비자” 강의는 무료인가요?

네 — “어댑터와 소비자” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn Rust Coding 강의 전체를 잠금 해제할 수 있습니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.

“어댑터와 소비자”에서 뭘 배우나요?

연산 연결하기 브라우저에서 직접 실행하는 실습 코드로 Learn Rust Coding을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Learn Rust Coding을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Learn Rust Coding은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“어댑터와 소비자” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Learn Rust Coding 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Learn Rust Coding 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Iterator 트레이트
  2. map, filter, collect
  3. 어댑터와 소비자
  4. 사용자 정의 반복자
← Learn Rust Coding(으)로 돌아가기