2026-08-03

공부하게 된 계기

자바 기초를 다시 공부하면서 아래 for문을 보게 되었다.

int sum = 0;

for (int i = 1; ; i++) {
    sum += i;

    if (sum > 10) {
        System.out.println("합이 10보다 크면 종료: i=" + i + ", sum=" + sum);
        break;
    }
}

for문의 괄호 안에는 초기식, 조건식, 증감식이 들어간다고 배웠는데, 가운데 조건식 없이 세미콜론(;)만 있어도 코드가 실행되는 이유가 궁금했다.

질문을 이어가면서 for, if, break 중 무엇이 반복문이고 무엇이 반복을 멈추는지도 다시 구분해 보았다.

먼저 결론

이 코드의 핵심은 한 문장으로 정리할 수 있다.

for가 반복하고, if가 멈출 조건을 검사하고, break가 반복을 멈춘다.

for문은 어디부터 어디까지인가

아래 코드에서는 for (...)와 그 뒤의 중괄호 전체가 반복문이다.

for (int i = 1; ; i++) {   // 반복문 시작
    sum += i;

    if (sum > 10) {
        break;
    }
}                           // 반복문 끝

각 요소의 역할은 다음과 같다.

  • for: 중괄호 안의 코드를 되풀이하는 반복문
  • if: 조건이 참인지 확인하는 조건문
  • break: 가장 가까운 반복문을 즉시 끝내는 명령문

if문은 반복문이 아니다. 반복되는 for문 안에서 매번 조건을 확인할 뿐이다.

for 반복문
├─ sum에 i를 더한다
└─ if 조건문으로 sum > 10인지 검사한다
   └─ 참이면 break가 for문을 끝낸다

조건식을 생략해도 실행되는 이유

일반적인 for문의 형태는 다음과 같다.

for (초기식; 조건식; 증감식) {
    // 반복할 코드
}

그런데 Java에서는 세 부분을 모두 반드시 작성해야 하는 것은 아니다. 조건식을 생략하면 조건을 항상 만족하는 것처럼 계속 반복한다.

for (int i = 1; ; i++)

이 문장을 우리말로 읽으면 다음과 같다.

i를 1로 시작한다. 반복이 한 번 끝날 때마다 i를 1씩 증가시킨다. 조건식이 없으므로 계속 반복한다.

조건식을 쓰지 않아도 두 개의 세미콜론은 남겨야 한다. 세미콜론이 초기식, 조건식, 증감식의 자리를 구분하기 때문이다.

그러면 언제 멈추는가

조건식이 없는 for문은 스스로 멈추지 않는다. 이 예제에서는 반복문 내부의 다음 코드가 종료 시점을 만든다.

if (sum > 10) {
    break;
}

정확히 나누면 ifsum > 10인지 검사하고, 조건이 참일 때 실행된 breakfor문을 멈춘다.

breakif문을 끝내는 것이 아니다. if는 반복문이 아니기 때문에, 자신을 감싸는 가장 가까운 반복문인 for를 종료한다.

값을 따라가며 확인하기

코드를 한 번에 이해하기 어려울 때는 변수의 값을 한 줄씩 따라가면 된다.

i=1 → sum=1
i=2 → sum=3
i=3 → sum=6
i=4 → sum=10
i=5 → sum=15 → sum > 10이 참 → break

따라서 결과는 다음과 같다.

합이 10보다 크면 종료: i=5, sum=15

break가 실행되면 그 자리에서 바로 반복문을 빠져나간다. 따라서 마지막에는 for문의 증감식인 i++가 실행되지 않는다.

while (true)로 바꾸면

같은 코드를 while문으로도 작성할 수 있다.

int sum = 0;
int i = 1;

while (true) {
    sum += i;

    if (sum > 10) {
        System.out.println("합이 10보다 크면 종료: i=" + i + ", sum=" + sum);
        break;
    }

    i++;
}

이 예제에서 두 반복문의 결과는 같다.

  • for문은 i의 시작값과 증가 방법을 괄호 안에 모아 둘 수 있다.
  • while (true)는 일단 계속 반복하고 내부에서 멈춘다는 모습이 눈에 잘 보인다.

지금 단계에서는 미묘한 표현 차이를 모두 이해하려고 할 필요는 없다. 숫자를 일정하게 증가시키는 반복은 먼저 for를 떠올리고, 조건이 유지되는 동안 반복하는 코드는 먼저 while을 떠올리는 정도면 충분하다.

주의할 점

조건식을 생략하고 종료 방법도 만들지 않으면 무한 반복이 된다.

for (;;) {
    // break, return 등의 종료 방법이 없으면 계속 실행된다.
}

실무 코드에서 의도하지 않은 무한 반복이 발생하면 CPU를 계속 사용하거나 프로그램이 응답하지 않을 수 있다. 조건식을 생략했다면 반드시 어디에서 종료되는지 확인해야 한다.

이번에 배운 점

  • for문 전체가 반복문이다.
  • if는 반복문 안에서 조건을 검사하는 조건문이다.
  • 조건식이 없는 for문은 계속 반복한다.
  • 예제에서는 if가 종료 조건을 검사하고 break가 실제 반복을 종료한다.
  • 어려운 코드는 추상적인 설명을 외우기보다 변수 값과 실행 순서를 직접 따라가는 편이 이해하기 쉽다.
  • 기억할 문장: for가 반복하고 → if가 검사하고 → break가 멈춘다.