본문 바로가기

언어/Rust

[ Rust ] for - for 문으로 코드 반복 수행하기

반응형

러스트의 for 문은 컬렉션(리스트, 벡터, 배열 등)을 반복하거나, 범위 값을 순회할 때 사용하는 반복문입니다. 다른 언어의 for-each와 유사하며, 러스트의 안전성과 성능을 고려해 설계되었습니다.


특징

  1. 컬렉션 순회: 벡터, 배열, 이터레이터 등 반복 가능한 객체를 순회합니다.
  2. 범위 순회: 범위 연산자(.. 또는 ..=)를 사용하여 숫자 범위를 반복할 수 있습니다.
  3. 안전성: 인덱스 초과 등의 오류를 방지합니다.
  4. 명시적 이터레이터: 반복 가능한 객체는 자동으로 이터레이터로 변환됩니다.

기본 구조

for element in collection {
    // element를 사용한 작업
}

 

예제 1: 범위 순회

범위를 순회하면서 반복 작업을 수행합니다.

fn main() {
    for i in 1..5 { // 1부터 4까지 (5는 포함되지 않음)
        println!("숫자: {}", i);
    }

    for i in 1..=5 { // 1부터 5까지 (5도 포함)
        println!("숫자: {}", i);
    }
}

실행 결과

숫자: 1
숫자: 2
숫자: 3
숫자: 4
숫자: 1
숫자: 2
숫자: 3
숫자: 4
숫자: 5

 

예제 2: 벡터 순회

벡터의 각 요소를 for 문으로 순회합니다.

fn main() {
    let numbers = vec![10, 20, 30, 40, 50];

    for num in &numbers {
        println!("값: {}", num);
    }
}

실행 결과

값: 10
값: 20
값: 30
값: 40
값: 50

 

예제 3: 인덱스와 값 함께 순회

enumerate 메서드를 사용하여 인덱스와 값을 함께 가져올 수 있습니다.

fn main() {
    let items = vec!["사과", "바나나", "체리"];

    for (index, item) in items.iter().enumerate() {
        println!("인덱스: {}, 값: {}", index, item);
    }
}

실행 결과

인덱스: 0, 값: 사과
인덱스: 1, 값: 바나나
인덱스: 2, 값: 체리

 

예제 4: 중첩된 for 문

중첩된 for 문을 사용하여 2차원 데이터 처리.

fn main() {
    let matrix = vec![
        vec![1, 2, 3],
        vec![4, 5, 6],
        vec![7, 8, 9],
    ];

    for row in &matrix {
        for value in row {
            print!("{} ", value);
        }
        println!();
    }
}

실행 결과

1 2 3 
4 5 6 
7 8 9 

 

예제 5: 역순 순회

이터레이터의 rev 메서드를 사용하여 역순으로 순회할 수 있습니다.

fn main() {
    for i in (1..=5).rev() {
        println!("역순 숫자: {}", i);
    }
}

실행 결과

역순 숫자: 5
역순 숫자: 4
역순 숫자: 3
역순 숫자: 2
역순 숫자: 1

 

예제 6: break와 continue 사용

breakcontinue를 사용하여 루프를 제어할 수 있습니다.

fn main() {
    for i in 1..10 {
        if i == 5 {
            println!("5를 만나서 루프 종료.");
            break;
        }

        if i % 2 == 0 {
            continue; // 짝수는 건너뜀
        }

        println!("홀수: {}", i);
    }
}

실행 결과

홀수: 1
홀수: 3
홀수: 5
5를 만나서 루프 종료.

 

예제 7: for 문에서 값 변환

map과 같은 이터레이터 메서드와 함께 사용하여 값을 변환할 수 있습니다.

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

    for squared in numbers.iter().map(|x| x * x) {
        println!("제곱 값: {}", squared);
    }
}

실행 결과

제곱 값: 1
제곱 값: 4
제곱 값: 9
제곱 값: 16
제곱 값: 25

요약

  • for 문은 컬렉션과 범위를 쉽게 순회할 수 있는 강력한 도구입니다.
  • iter, enumerate, rev 등 다양한 이터레이터 메서드를 활용하면 더욱 유연한 작업이 가능합니다.
  • 안전하고 효율적인 반복 구조를 제공하며, breakcontinue로 제어 흐름을 조정할 수 있습니다.

러스트의 for 문은 직관적이면서도 유연해 반복 작업을 깔끔하게 처리할 수 있습니다.

반응형