---
title: "break 는 나가고, continue 는 건너뛴다"
description: "하나는 반복문을 끝내고 하나는 이번 회차만 포기합니다. continue 는 반복을 멈추지 않습니다."
author: "유니얼"
pubDate: 2026-09-08
category: "programming/csharp/basics"
tags: ["C#", "기초"]
canonical: https://blog.unialgames.com/posts/csharp-break-continue/
---
지금까지 반복문은 조건이 거짓이 될 때 끝났습니다.
그런데 도는 도중에 "여기서 그만" 하고 싶을 때가 있습니다.

목록에서 찾는 값을 발견했다면 남은 칸을 더 볼 이유가 없습니다.
조건이 거짓이 되기를 기다릴 필요도 없습니다.

이때 쓰는 키워드가 두 개 있습니다. 둘 다 흐름을 끊지만 끊는 범위가 다릅니다.

> **`break` 는 반복문을 끝내고, `continue` 는 이번 회차만 끝냅니다.**

## break 는 반복문 밖으로 나간다

<x-flow>
<script type="application/json">
{
  "label": "break 를 만나면",
  "dwell": 1.3,
  "lines": [
    "for (int i = 0; i < 4; i++)",
    "{",
    "    if (i == 2)",
    "    {",
    "        break;",
    "    }",
    "    Console.WriteLine(i);",
    "}",
    "Console.WriteLine(\"끝\");"
  ],
  "cases": [
    {
      "label": "i == 2 에서 나간다",
      "state": "i = 0",
      "path": [
        { "line": 0, "why": "0 부터 시작합니다.", "state": "i = 0" },
        { "line": 2, "why": "아직 2 가 아닙니다.", "verdict": "거짓" },
        { "line": 6, "out": "0" },
        { "line": 0, "why": "증가하고 조건을 다시 봅니다.", "state": "i = 1" },
        { "line": 2, "verdict": "거짓" },
        { "line": 6, "out": "1" },
        { "line": 0, "state": "i = 2" },
        { "line": 2, "why": "이번엔 참입니다.", "verdict": "참" },
        { "line": 4, "why": "여기서 반복문이 끝납니다. i 는 아직 4 가 안 됐는데도요." },
        { "line": 8, "why": "닫는 중괄호 아래로 바로 나갑니다.", "out": "끝" }
      ],
      "skip": [7],
      "note": "조건 i < 4 는 아직 참이지만 break 가 먼저 반복문을 끝냈습니다."
    }
  ]
}
</script>
</x-flow>

`break` 를 만나면 조건을 다시 보지 않습니다. 증감식도 실행하지 않습니다.
**반복문 전체가 그 자리에서 끝나고**, 닫는 중괄호 다음 줄로 나갑니다.

앞에서 본 `switch` 에서도 `break` 를 썼습니다. 같은 키워드입니다.
가장 가까운 `switch` 나 반복문 하나를 빠져나옵니다.

## continue 는 이번 회차만 포기한다

<x-flow>
<script type="application/json">
{
  "label": "continue 를 만나면",
  "dwell": 1.3,
  "lines": [
    "for (int i = 0; i < 4; i++)",
    "{",
    "    if (i % 2 == 0)",
    "    {",
    "        continue;",
    "    }",
    "    Console.WriteLine(i);",
    "}",
    "Console.WriteLine(\"끝\");"
  ],
  "cases": [
    {
      "label": "짝수는 건너뛴다",
      "state": "i = 0",
      "path": [
        { "line": 0, "why": "0 부터 시작합니다.", "state": "i = 0" },
        { "line": 2, "why": "0 은 짝수입니다.", "verdict": "참" },
        { "line": 4, "why": "이번 회차는 여기서 끝. 아래 출력은 건너뜁니다." },
        { "line": 0, "why": "반복문이 끝난 것이 아닙니다. 증감식으로 가서 다음 회차입니다.", "state": "i = 1" },
        { "line": 2, "why": "1 은 홀수입니다.", "verdict": "거짓" },
        { "line": 6, "why": "그래서 여기까지 옵니다.", "out": "1" },
        { "line": 0, "state": "i = 2" },
        { "line": 2, "verdict": "참" },
        { "line": 4, "why": "또 건너뜁니다." },
        { "line": 0, "state": "i = 3" },
        { "line": 2, "verdict": "거짓" },
        { "line": 6, "out": "3" },
        { "line": 0, "why": "i 가 4 가 되어 조건이 거짓입니다.", "state": "i = 4" },
        { "line": 8, "why": "이번에는 조건이 끝냈습니다.", "out": "끝" }
      ],
      "note": "네 바퀴를 다 돌았습니다. 건너뛴 것은 출력이지 회차가 아닙니다."
    }
  ]
}
</script>
</x-flow>

**`continue` 는 반복을 멈추지 않습니다.** 다음 회차는 그대로 돕니다.
건너뛰는 것은 이번 회차에서 아직 실행되지 않은 나머지 코드뿐입니다.

`for` 에서 `continue` 를 만나면 **증감식은 실행됩니다.**
그러니까 `i++` 는 건너뛰지 않습니다. 위 애니메이션에서 `i` 가 계속 늘어난 이유입니다.

## while 에서 continue 를 쓸 때는 조심한다

`for` 는 증감식이 괄호에 있어서 `continue` 가 건너뛸 수 없는 자리에 있습니다.
`while` 은 다릅니다. 변화를 블록 안에 직접 적으니 건너뛸 수 있습니다.

```csharp
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` 를 쓰는 편이 낫습니다.

## 둘을 같이 쓰면

```csharp
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` 아래에 두면 무한 루프가 됩니다.
- 둘을 같이 쓰면 위에 적은 쪽이 먼저 걸립니다.