break 는 나가고, continue 는 건너뛴다
Esc

    break 는 나가고, continue 는 건너뛴다

    –C#기초

    지금까지 반복문은 조건이 거짓이 될 때 끝났습니다. 그런데 도는 도중에 “여기서 그만” 하고 싶을 때가 있습니다.

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

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

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