콘텐츠로 이동

Rust break와 continue

break와 continue를 쓰면 반복문을 끝까지 돌리지 않고 중간에 끊을 수 있어요. loop, while, for 세 가지 반복문 모두에서 똑같이 동작해요.

break: 반복문을 완전히 빠져나가기

섹션 제목: “break: 반복문을 완전히 빠져나가기”

break는 반복문을 즉시 멈추고, 실행은 반복문 바로 다음 코드로 넘어가요.

fn main() {
for i in 1..=10 {
if i == 5 {
break;
}
println!("{i}");
}
}

실행 결과:

1
2
3
4
▶ 직접 실행해 보기

범위는 10까지지만, i가 5가 되는 순간 반복문이 멈춰요.

continue는 반복문을 완전히 멈추는 대신, 이번 차례의 남은 부분을 건너뛰고 바로 다음 차례로 넘어가요.

fn main() {
for i in 1..=10 {
if i % 2 == 0 {
continue; // 짝수는 건너뛰어요
}
println!("{i}");
}
}

실행 결과:

1
3
5
7
9
▶ 직접 실행해 보기

짝수는 모두 건너뛰어요. continue가 실행되면 println!을 실행하지 않고 곧바로 다음 i 값으로 넘어가요.

반복문 안에 다른 반복문을 넣으면(중첩하면), 그냥 쓰는 break/continue는 가장 안쪽 반복문에만 영향을 줘요. 안쪽 반복문에서 바깥 반복문을 빠져나가고 싶다면, 바깥 반복문에 라벨을 붙이세요('이름: 형태로 써요).

fn main() {
'outer: for x in 1..=3 {
for y in 1..=3 {
if x * y > 4 {
break 'outer;
}
println!("{x} x {y} = {}", x * y);
}
}
}

실행 결과:

1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
2 x 1 = 2
2 x 2 = 4
▶ 직접 실행해 보기

라벨이 없으면 break는 안쪽의 y 반복문만 멈추고, x 반복문은 계속 돌아요. break 'outer;는 두 반복문을 한꺼번에 멈춰요. continue 'outer;도 같은 방식으로 동작해요. 완전히 멈추는 대신 바깥 반복문의 다음 차례로 건너뛰고 싶을 때 쓰면 돼요.

for 반복문에서는 다음 값이 범위에서 자동으로 나오기 때문에 continue를 써도 언제나 안전해요. while 반복문은 달라요. 카운터를 갱신하는 건 여러분의 몫이고, 보통 본문 맨 아래에서 갱신하죠. continue가 그 갱신 코드를 건너뛰어 버리면 카운터가 바뀌지 않아서 반복문이 영원히 돌아요.

아래 코드는 3을 건너뛰려고 하지만 멈추지 않아요. 실행하지 마세요.

fn main() {
let mut i = 0;
while i < 5 {
if i == 3 {
continue; // ❌ i를 바꾸지 않은 채로 위로 돌아가요
}
println!("{i}");
i += 1;
}
}

i가 3이 되면 continue가 조건 검사로 돌아가요. i는 여전히 3이니까 continue가 또 실행되고, 또 실행되고, 영원히 반복돼요. 해결책은 continue가 실행될 수 있는 코드보다 먼저 카운터를 갱신하는 거예요.

fn main() {
let mut i = 0;
while i < 5 {
i += 1; // 먼저 갱신해서 continue가 건너뛸 수 없게 해요
if i == 3 {
continue;
}
println!("{i}");
}
}

실행 결과:

1
2
4
5
▶ 직접 실행해 보기

i += 1을 맨 위로 옮기면 숫자가 하나씩 밀려요. 이 반복문은 0부터 4가 아니라 1부터 5를 출력해요. 원래 범위가 필요하다면 시작값이나 조건을 조정하세요. 그냥 숫자를 세는 거라면 범위를 도는 for 반복문을 쓰는 게 더 좋아요. 그러면 이 문제가 아예 생길 수 없어요.

1부터 10까지 출력하되, 3의 배수는 모두 건너뛰세요. 힌트: n % 3 == 0이면 3의 배수예요. continue로 건너뛰세요.

정답 보기
fn main() {
for n in 1..=10 {
if n % 3 == 0 {
continue;
}
println!("{n}");
}
}

실행 결과:

1
2
4
5
7
8
10
▶ 직접 실행해 보기

x와 y 두 개의 for 반복문을 중첩하고, 둘 다 1..=9를 돌게 하세요. x * y == 24가 되는 첫 번째 쌍을 찾아 출력하고 두 반복문을 모두 멈추세요. 힌트: 바깥 반복문에 라벨을 붙이고 break 'outer;를 쓰세요.

정답 보기
fn main() {
'outer: for x in 1..=9 {
for y in 1..=9 {
if x * y == 24 {
println!("찾았어요: {x} x {y} = 24");
break 'outer;
}
}
}
println!("검색 끝");
}

실행 결과:

찾았어요: 3 x 8 = 24
검색 끝
▶ 직접 실행해 보기

break 'outer;를 그냥 break;로 바꿔 보세요. 이제 안쪽 반복문만 멈추기 때문에 검색이 계속되고, 4 x 6, 6 x 4, 8 x 3도 출력돼요.

  • break는 반복문을 즉시 빠져나가요.
  • continue는 이번 반복의 남은 부분을 건너뛰고 다음 반복으로 넘어가요.
  • 라벨('outer:)을 붙이면 중첩된 반복문 안에서 break/continue로 바깥 반복문을 제어할 수 있어요.
  • while 반복문에서는 continue보다 먼저 카운터를 갱신하세요. 그렇지 않으면 반복문이 영원히 멈추지 않을 수 있어요.

이해도 점검

1. 반복문 안에서 continue는 무슨 일을 할까요?

2. 중첩된 반복문에서 break로 가리킬 수 있도록 반복문에 라벨을 붙이려면 어떻게 쓸까요?

3. continue가 들어 있는 while 반복문이 끝나지 않아요. 가장 그럴듯한 원인은 무엇일까요?

점수: 0 / 3