언어/Rust

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

Soso Dev 2024. 11. 16. 04:12
반응형

러스트의 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)과 함께 사용하면 더욱 강력한 제어 흐름을 구현할 수 있습니다.

반응형