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 | 컬렉션/범위 순회, 안전하고 권장됨 |