break 는 나가고, continue 는 건너뛴다
지금까지 반복문은 조건이 거짓이 될 때 끝났습니다. 그런데 도는 도중에 “여기서 그만” 하고 싶을 때가 있습니다.
목록에서 찾는 값을 발견했다면 남은 칸을 더 볼 이유가 없습니다. 조건이 거짓이 되기를 기다릴 필요도 없습니다.
이때 쓰는 키워드가 두 개 있습니다. 둘 다 흐름을 끊지만 끊는 범위가 다릅니다.
break는 반복문을 끝내고,continue는 이번 회차만 끝냅니다.
break 는 반복문 밖으로 나간다
break 를 만나면 조건을 다시 보지 않습니다. 증감식도 실행하지 않습니다.
반복문 전체가 그 자리에서 끝나고, 닫는 중괄호 다음 줄로 나갑니다.
앞에서 본 switch 에서도 break 를 썼습니다. 같은 키워드입니다.
가장 가까운 switch 나 반복문 하나를 빠져나옵니다.
continue 는 이번 회차만 포기한다
continue 는 반복을 멈추지 않습니다. 다음 회차는 그대로 돕니다.
건너뛰는 것은 이번 회차에서 아직 실행되지 않은 나머지 코드뿐입니다.
for 에서 continue 를 만나면 증감식은 실행됩니다.
그러니까 i++ 는 건너뛰지 않습니다. 위 애니메이션에서 i 가 계속 늘어난 이유입니다.
while 에서 continue 를 쓸 때는 조심한다
for 는 증감식이 괄호에 있어서 continue 가 건너뛸 수 없는 자리에 있습니다.
while 은 다릅니다. 변화를 블록 안에 직접 적으니 건너뛸 수 있습니다.
int i = 0;
while (i < 4)
{
if (i % 2 == 0)
{
continue; // i++ 를 건너뜁니다
}
Console.WriteLine(i);
i++;
}
i 가 0일 때 continue 로 올라가고, i 는 그대로 0이고, 다시 짝수라 또 올라갑니다.
무한 루프입니다.
앞에서 무한 루프의 원인을 셋으로 정리했는데, 이건 첫 번째(변화가 없다)의
좀 더 교묘한 형태입니다. i++ 를 적긴 적었는데 거기까지 못 가는 것입니다.
while 안에서 continue 를 쓸 거라면 변화를 continue 보다 위에 두어야 합니다.
헷갈릴 것 같으면 그냥 for 를 쓰는 편이 낫습니다.
둘을 같이 쓰면
for (int i = 0; i < 10; i++)
{
if (i == 5) break;
if (i % 2 == 0) continue;
Console.WriteLine(i);
}
출력은 1 과 3, 두 줄뿐입니다.
| i | i == 5 |
짝수 | 결과 |
|---|---|---|---|
| 0 | 아니오 | 예 | continue 로 건너뜀 |
| 1 | 아니오 | 아니오 | 1 출력 |
| 2 | 아니오 | 예 | continue 로 건너뜀 |
| 3 | 아니오 | 아니오 | 3 출력 |
| 4 | 아니오 | 예 | continue 로 건너뜀 |
| 5 | 예 | - | break 로 반복 종료 |
i 가 5일 때 break 가 continue 보다 위에 있어서 먼저 걸립니다.
앞에서 본 것과 같습니다. 조건을 쓴 순서가 곧 우선순위입니다.
두 줄의 위치를 바꾸면 5는 홀수라 출력되고 나서 다음 회차에 끝납니다.
정리
break는 반복문 전체를 그 자리에서 끝냅니다. 조건도 증감식도 보지 않습니다.continue는 이번 회차의 남은 코드만 건너뜁니다. 다음 회차는 그대로 돕니다.for에서continue를 만나도 증감식은 실행됩니다.while에서 변화를continue아래에 두면 무한 루프가 됩니다.- 둘을 같이 쓰면 위에 적은 쪽이 먼저 걸립니다.