반복문: loop, while, for

반복문, loop, while, for

Rust에서는 loop, while, for라는 3가지 반복문을 제공합니다: . 사용법은 다른 언어와 비슷한데, Rust에만 특이한 것은 loop에 라벨을 붙일 수 있고, break 다음에 값을 적어 값을 반환할 수 있으며, for문에서 반복하기 위한 iter 메소드가 있습니다.


🔁 무한 루프: loop

fn main() {
    let mut count = 0;

    loop {
        println!("count: {}", count);
        count += 1;

        if count == 3 {
            break;
        }
    }
}
  • loop는 무한히 반복합니다.
  • break를 통해 루프를 종료할 수 있습니다.
    위 코드를 실행하면 count값이 0에서 1씩 증가하다가 3이면 끝나는데, 화면 출력은 그 전에 되므로 0, 1, 2까지만 출력됩니다.
  • break가 없다면 무한 반복하므로 강제로 종료하려면 Ctrl + C를 눌러야 합니다.

📦 값을 반환하는 loop

fn main() {
    let result = loop {
        let num = 5;
        break num * 2;
    };
    println!("결과: {}", result); // 10
}
  • break 뒤에 값을 적으면 루프가 해당 값을 반환하고 종료합니다.
  • 따라서, 위 코드를 실행하면 화면에 결과: 10이 출력됩니다.

Loop 라벨

여러 개의 loop 사이의 모호함을 제거하기 위해 loop에 라벨을 붙일 수 있습니다.

fn main() {
    let mut count = 0;
    'counting_up: loop {
        println!("count = {count}");
        let mut remaining = 10;

        loop {
            println!("remaining = {remaining}");
            if remaining == 9 {
                break;
            }
            if count == 2 {
                break 'counting_up;
            }
            remaining -= 1;
        }

        count += 1;
    }
    println!("End count = {count}");
}
  • loop 라벨은 ‘로 시작하고, 이름을 붙인 다음 :으로 끝납니다.
  • 그리고 이동할 라벨을 지정할 때는 break 또는 continue 다음에 ‘라벨명; 이라고 적습니다.
    위 코드를 보면 첫번째 break 문에서는 loop 라벨을 지정하지 않았으므로 안쪽 loop를 벗어나서 count += 1;로 이동하는데,
    두번째 break 문은 ‘counting_up이라고 loop 라벨을 지정했으므로 바깥쪽 루프를 벗어나서 println!(“count = {count}”);을 실행하게 됩니다.
  • 따라서, 위 코드를 실행하면
    바깥쪽 loop에서 count 값 0과 remaining 값 10을 출력하고,
    안쪽 loop에서 remaining값을 1 감소시켜 9가 되며 9를 출력한 다음, remaining이 9이므로 break문으로 안쪽 loop를 벗어난 다음,
    바깥쪽 loop에서 count값을 1 증가시켜 1을 만든 다음 1을 출력하고, remaining을 10으로 만들고 .
    안쪽 loop로 들어가 remaining 값 10을 출력하고, remaing을 1감소시켜 9를 만들고 9를 출력한 다음 remaining이 9이므로 다시 안쪽 loop를 벗어나
    바깥쪽 loop에서 count값을 1 증가시켜 2를 만든 다음 2를 출력하고, remaining을 10으로 만들고 .
    안쪽 loop로 다시 들어가 remaining 값 10을 출력하고, count값이 2이므로 break ‘counting_up 문이 실행되어 ‘counting_up에 해당하는 바깥쪽 loop를 끝내고,
    count값 2를 출력하고 실행을 마칩니다.


🔄 조건반복: while

fn main() {
    let mut n = 0;

    while n < 5 {
        println!("n: {}", n);
        n += 1;
    }
}
  • 조건이 true인 동안 반복합니다.
  • 일반적인 조건 반복에 사용됩니다.

🔄 조건 반복: while 2

fn main() {
    let a = [10, 20, 30, 40, 50];
    let mut index = 0;

    while index < 5 {
        println!("the value is: {}", a[index]);

        index += 1;
    }
}
  • 대괄호로 표시된 [10, 20, 30, 40, 50]은 배열이며 요소들을 불러낼 때는 index를 대괄호 안에 넣으며, index는 0부터 시작합니다.
  • 따라서, 위 코드는 배열 a의 요소를 하나씩 꺼내서 화면에 출력하는 것입니다.

🔂 컬렉션 반복: for

  • 배열, 벡터 등 반복 가능한 값들을 순회할 때 사용합니다.
fn main() {
    let a = [10, 20, 30, 40, 50];

    for element in a {
        println!("the value is: {element}");
    }
}

위 ‘while 2’와 달리 index를 사용하지 않고 출력하고 있습니다.

fn main() {
    let numbers = [10, 20, 30];

    for num in numbers.iter() {
        println!("num: {}", num);
    }
}

.iter()를 사용해서 출력할 수도 있습니다.
위 코드를 실행하면 numbers 배열의 값을 하나씩 화면에 출력합니다.

📦 범위 반복

fn main() {
    for i in 1..5 {
        println!("{}", i);
    }

    for i in 1..=5 {
        println!("(inclusive) {}", i);
    }
}
  • rust에서 범위는 ..을 사용해서 표현합니다.
    1..5: 1 이상 5 미만이고,
    1..=5: 5를 포함할 때는 =을 앞에 붙이면 됩니다. 따라서, 1..=5는 1 이상 5 이하입니다.


⏹️ 루프 제어: break, continue

fn main() {
    for i in 0..5 {
        if i == 2 {
            continue; // 2는 건너뜀
        }
        if i == 4 {
            break;    // 4에서 종료
        }
        println!("i: {}", i);
    }
}
  • continue는 이후의 구문을 실행하지 않고 건너뛰는 것이며, break는 반복문은 종료하는 것입니다.
  • 따라서, 위 코드를 실행하면 0, 1, 3만 출력됩니다.

🧠 요약

반복문설명
loop무한 루프, break 필요
while조건 기반 루프
for컬렉션/범위 순회, 안전하고 권장됨

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다