본문 바로가기

언어/Rust

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

반응형

러스트의 while 문은 조건이 true인 동안 특정 코드 블록을 반복 실행하는 조건 기반 루프입니다. loop와 달리, while은 반복을 시작하기 전에 조건을 평가합니다. 조건이 처음부터 false라면 한 번도 실행되지 않을 수 있습니다.


기본 구조

while condition {
    // condition이 true인 동안 실행되는 코드
}
  • condition은 반드시 bool 타입이어야 합니다.
  • 조건이 false가 되면 루프가 종료됩니다.

 

예제 1: 기본적인 while 루프

fn main() {
    let mut count = 0;

    while count < 5 {
        println!("현재 카운트: {}", count);
        count += 1;
    }

    println!("루프 종료 후 카운트: {}", count);
}

실행 결과

현재 카운트: 0
현재 카운트: 1
현재 카운트: 2
현재 카운트: 3
현재 카운트: 4
루프 종료 후 카운트: 5

 

예제 2: 사용자 입력을 이용한 while 루프

use std::io;

fn main() {
    let mut input = String::new();

    println!("'exit'을 입력하면 종료됩니다.");

    while input.trim() != "exit" {
        input.clear();
        println!("문자열을 입력하세요:");
        io::stdin()
            .read_line(&mut input)
            .expect("입력 오류");

        println!("입력한 내용: {}", input.trim());
    }

    println!("프로그램이 종료되었습니다.");
}

실행 결과

'exit'을 입력하면 종료됩니다.
문자열을 입력하세요:
hello
입력한 내용: hello
문자열을 입력하세요:
exit
입력한 내용: exit
프로그램이 종료되었습니다.

 

예제 3: 조건에 따라 리스트 순회하기

while을 사용하여 벡터(리스트) 내의 요소를 순회하면서 조건에 따라 작업할 수 있습니다.

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

    while index < numbers.len() {
        println!("인덱스 {}: 값 {}", index, numbers[index]);

        // 특정 조건에서 루프 종료
        if numbers[index] == 30 {
            println!("30을 찾았습니다. 루프를 종료합니다.");
            break;
        }

        index += 1;
    }
}

실행 결과

인덱스 0: 값 10
인덱스 1: 값 20
인덱스 2: 값 30
30을 찾았습니다. 루프를 종료합니다.

 

예제 4: 중첩 while 루프

중첩된 while 루프를 활용하여 2차원 데이터나 복잡한 조건을 처리할 수 있습니다.

fn main() {
    let mut outer = 0;

    while outer < 3 {
        let mut inner = 0;

        while inner < 3 {
            println!("외부: {}, 내부: {}", outer, inner);
            inner += 1;
        }

        outer += 1;
    }
}

실행 결과

외부: 0, 내부: 0
외부: 0, 내부: 1
외부: 0, 내부: 2
외부: 1, 내부: 0
외부: 1, 내부: 1
외부: 1, 내부: 2
외부: 2, 내부: 0
외부: 2, 내부: 1
외부: 2, 내부: 2

 

예제 5: while에서 벡터 요소 제거

while을 사용하여 조건을 만족하는 벡터의 요소를 제거할 수도 있습니다.

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

    while !numbers.is_empty() {
        let removed = numbers.pop().unwrap();
        println!("제거된 값: {}, 남은 리스트: {:?}", removed, numbers);
    }

    println!("벡터가 비어있습니다.");
}

실행 결과

제거된 값: 5, 남은 리스트: [1, 2, 3, 4]
제거된 값: 4, 남은 리스트: [1, 2, 3]
제거된 값: 3, 남은 리스트: [1, 2]
제거된 값: 2, 남은 리스트: [1]
제거된 값: 1, 남은 리스트: []
벡터가 비어있습니다.

요약

  • while은 조건에 따라 반복 실행되는 루프입니다.
  • 조건이 false가 되면 루프가 종료됩니다.
  • 벡터 순회, 사용자 입력 처리, 조건 기반 데이터 조작 등 다양한 상황에서 활용할 수 있습니다.

while 루프는 러스트의 다른 반복문(loop, for)과 함께 사용하면 더욱 강력한 제어 흐름을 구현할 수 있습니다.

반응형