JavaScript break · continue —
반복 제어 완전 정리
반복문 안에서 조건에 따라 흐름을 바꾸는 두 가지 키워드, break와 continue를 각각 다른 예제로 살펴본다. 하나는 무한 반복을 끊고 나가는 코드, 다른 하나는 특정 회차만 건너뛰고 계속 도는 코드다.
1에서 얼마까지 더해야 3000을 넘는가?
77까지 더하면 3000을 넘음 : 3003
3으로 나눈 나머지가 1인 수만 더하기
1 4 7 10 합은 22
break는 "이 반복문 자체를 지금 당장 끝내라"는 명령이다. 남은 반복 횟수가 있어도, 조건이 아직 참이어도 상관없이 break를 실행하는 그 줄에서 반복문을 완전히 빠져나가 바로 다음 코드로 넘어간다.
while(true)는 괄호 안 조건이 항상 참(true)이므로, 반복을 멈출 조건 자체가 없다. 이런 구조를 쓰는 이유는 "몇 번 반복할지 미리 알 수 없고, 조건을 만족하는 순간 즉시 멈추고 싶을 때"다. 이번 코드가 정확히 그 경우다 — 몇까지 더해야 3000을 넘는지 미리 알 수 없으니, 넘는 순간 break로 끊는다.
- 몇 번 반복해야 할지 미리 계산할 수 없다 (1부터 몇까지 더해야 3000 초과인지는 실행해봐야 앎)
- 그래서 반복 횟수 대신 "조건을 만족하는 순간"을 기준으로 멈춘다
- while(true) + break 조합은 "조건 만족 시 즉시 종료"를 표현하는 대표적인 패턴이다
while(true)는 스스로 멈추지 않는다. 멈추는 유일한 방법은 반복문 안에서 break를 실행하는 것뿐이다. 만약 if(sum > 3000) break; 줄을 실수로 지우거나 조건을 잘못 써서 절대 참이 되지 않게 만들면, 이 반복문은 영원히 끝나지 않는다.
if(i > 100000) break; 같은 임시 탈출 조건을 하나 더 넣는 습관이 안전하다.
continue는 반복문을 끝내지 않는다. "이번 회차에서 continue 아래에 남은 코드만 건너뛰고, 다음 반복으로 넘어가라"는 명령이다. 반복문 자체는 계속 살아있다는 점이 break와의 결정적 차이다.
이번 코드에서는 i % 3 != 1(3으로 나눈 나머지가 1이 아닌 경우) 조건이 참일 때 continue가 실행된다. 그러면 그 아래 있는 "출력하고 더하는" 코드 두 줄은 이번 i에 대해서는 실행되지 않고 건너뛴다.
여기가 이번 예제에서 가장 중요한 포인트다. for문의 구조는 for(초기식; 조건식; 증감식)인데, continue는 몸통(중괄호 안) 코드만 건너뛸 뿐, for문 자체가 가진 증감식(i++)은 건너뛰지 않는다. continue가 실행되면 흐름은 몸통을 빠져나가 바로 증감식(i++)으로 점프하고, 그다음 조건식을 다시 검사한다.
for가 아니라 while문 안에서 continue를 쓴다면 이야기가 다르다. while문은 증감식이 조건 괄호에 없고 몸통 안에 직접 i++를 써야 하는데, continue가 그 i++보다 먼저 있으면 i++ 자체가 건너뛰어져 i가 영원히 그대로인 무한루프가 될 수 있다. for문은 증감식이 문법 구조상 분리되어 있어 이 문제가 없다.break는 "그만 돌자(반복문 탈출)", continue는 "이번 건 패스하고 계속 돌자(다음 회차로)"다. 실행 후 코드가 어디로 가는지를 비교하면 명확해진다.
반복문 다음 줄로 바로 이동
남은 반복 횟수는 전부 무시됨
"탈출"
증감식(또는 조건 재검사)으로 이동
이번 회차 나머지 코드만 무시됨
"패스"
if 조건과 함께 쓰인다. break·continue 자체는 조건 없이도 문법상 쓸 수 있지만, 조건 없이 반복문 맨 위에 두면 그 반복문은 사실상 의미가 없어진다(첫 회차에 바로 끝나거나 항상 패스됨).반복문 안에 반복문이 들어있는 "중첩 반복"에서는 break와 continue가 자신을 감싸고 있는 가장 안쪽 반복문에만 영향을 준다. 오늘 코드에는 중첩 반복이 없지만, 실무에서 매우 자주 나오는 오해 지점이라 짚고 넘어간다.
| 실수 | 증상 | 해결 |
|---|---|---|
| while(true)에 break 조건을 안 넣음 | 브라우저 탭이 멈추거나 "응답 없음" | 반드시 특정 조건에서 break가 실행되도록 확인 |
| while문에서 continue를 i++ 앞에 둠 | i가 갱신 안 되고 무한루프 | i++를 continue보다 먼저 실행되게 배치하거나 for문 사용 |
| break·continue를 if 없이 무조건 실행 | 반복문이 1회만 돌고 끝나거나 몸통이 항상 패스됨 | 반드시 조건문(if) 안에서만 사용 |
| break와 continue를 혼동 | 전체를 끝내야 하는데 한 번만 건너뛰거나 그 반대 | "탈출=break / 패스=continue"로 암기 |
| 중첩 반복에서 break가 바깥까지 끊을 거라 착각 | 바깥 반복이 예상과 달리 계속 실행됨 | break는 가장 안쪽 반복문에만 적용됨을 기억 |
핵심 한 줄 요약
Tags
'php' 카테고리의 다른 글
| JavaScript 전역 함수 — eval · parseInt · isNaN 완전 정리 (0) | 2026.07.03 |
|---|---|
| JavaScript 함수 — 선언·파라미터·return 완전 정리 (0) | 2026.07.03 |
| JavaScript switch — 커피 주문 완전 정리 (0) | 2026.07.03 |
| JavaScript 반복문 — for · while · do-while 완전 정리 (0) | 2026.07.03 |
| JavaScript 문자열 연산 — 타입 혼합과 비교 완전 정리 (0) | 2026.07.03 |
왕진 블로그

댓글