본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

JavaScript 반복문 — for · while · do-while 완전 정리

by 왕진 2026. 7. 3.
반응형

 

 

Web Development · JavaScript

JavaScript 반복문 —
for · while · do-while 완전 정리

같은 일을 반복하는 세 가지 문법, 겉모습은 달라도 하는 일은 같다
시작 오늘 분석할 코드

반복문 3형제 중 먼저 for문 코드를 본다. size라는 변수를 10부터 35까지 5씩 늘려가며 그때그때 글자 크기가 다른 <span>을 화면에 출력하는 코드다. 아래에서 while·do-while 버전도 이어서 다룬다.

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>for 문</title> </head> <body> <h3>for 문으로 10px~35px 크기 출력</h3> <hr> <script> for(let size=10; size<=35; size+=5) { // 5씩 증가 document.write("<span "); document.write("style='font-size:" + size + "px'>"); document.write(size + "px"); document.write("</span>"); } </script> </body> </html>
실제 출력 미리보기
10px  15px  20px  25px  30px  35px
while / do-while 예제 출력 → 0에서 5까지 합은 15
용어 용어 정리
반복문같은 코드를 조건이 맞는 동안 여러 번 되풀이 실행하는 문법
초기식반복을 시작하기 전 딱 한 번 실행되는 값 설정 (예: let size=10)
조건식매 반복 전 검사하는 참/거짓 식 — 거짓이면 반복 종료
증감식한 바퀴가 끝날 때마다 실행되는 값 변경식 (예: size+=5)
for초기식·조건식·증감식을 한 줄에 모아 쓰는 반복문
while조건식만 앞에 두고 반복하는, 더 단순한 형태의 반복문
do-while일단 한 번 실행부터 하고, 그 다음 조건을 검사하는 반복문
무한루프조건이 절대 거짓이 되지 않아 영원히 반복되는 상태(버그)

1 반복문이 왜 필요한가
"복사-붙여넣기" 대신 반복문을 쓰는 이유

위 코드가 하는 일은 document.write6번 다른 크기로 실행하는 것이다. 반복문이 없다면 아래처럼 크기 값만 바꿔서 같은 줄을 6번 써야 한다.

document.write("<span style='font-size:10px'>10px</span>"); document.write("<span style='font-size:15px'>15px</span>"); document.write("<span style='font-size:20px'>20px</span>"); ... (계속 반복, 크기만 다름) ...

이 방식은 6번이라 그나마 참을 만하지만, 만약 1000번 반복해야 한다면? 또는 반복 횟수가 사용자 입력에 따라 매번 달라진다면? 코드로 직접 다 쓸 수 없다. "바뀌는 부분만 변수로 남기고, 나머지는 컴퓨터에게 반복시키는 것"이 반복문의 존재 이유다.

※ 반복문의 핵심 공식: "무엇을 반복할까(코드)" + "언제까지 반복할까(조건)" + "매번 뭐가 바뀌는가(변수)" — 이 세 가지만 정하면 나머지는 자동이다.

2 for의 3요소 — 초기식 ; 조건식 ; 증감식
for( 초기식 ; 조건식 ; 증감식 ) { 실행할 코드 }

for문 괄호 안에는 세미콜론(;)으로 구분된 세 부분이 들어간다. 순서와 역할이 정확히 정해져 있다.

부분 이번 코드 실행 시점
① 초기식 let size=10 맨 처음 딱 1번만
② 조건식 size<=35 매 바퀴 시작 전마다
③ 증감식 size+=5 매 바퀴 끝날 때마다

실제 실행 순서는 "① → (②검사 → 코드실행 → ③) → (②검사 → 코드실행 → ③) → ... → ②에서 거짓이 되면 종료"다. 화살표로 보면 다음과 같다.

① size=10
② size<=35?
코드 실행
③ size+=5
※ 조건식이 거짓이 되는 순간 코드 실행과 증감식은 건너뛰고 바로 반복문 전체를 빠져나간다. 즉 size가 40이 되면 조건(40<=35)이 거짓이라 더 이상 출력하지 않는다.

3 size+=5 한 줄이 하는 일
size+=5 는 무슨 뜻인가?

size += 5size = size + 5의 줄임 표현이다. "지금 size 값에 5를 더해서 다시 size에 저장하라"는 뜻이다. 이 한 줄이 매 바퀴 끝에서 실행되기 때문에 size 값이 10 → 15 → 20 → 25 → 30 → 35로 커진다.

1바퀴: size=10 → 조건 10<=35 참 → 출력 "10px" → size=10+5=15 2바퀴: size=15 → 조건 15<=35 참 → 출력 "15px" → size=15+5=20 3바퀴: size=20 → 조건 20<=35 참 → 출력 "20px" → size=20+5=25 4바퀴: size=25 → 조건 25<=35 참 → 출력 "25px" → size=25+5=30 5바퀴: size=30 → 조건 30<=35 참 → 출력 "30px" → size=30+5=35 6바퀴: size=35 → 조건 35<=35 참 → 출력 "35px" → size=35+5=40 7바퀴: size=40 → 조건 40<=35 거짓 → 종료

즉 코드 안에서는 document.write가 딱 한 번만 등장하지만, size 값이 바뀌면서 실제로는 6번 실행된 것과 같은 효과가 난다. 그 사이에 완성되는 문자열은 "<span style='font-size:10px'>10px</span>"처럼 size 값이 그대로 텍스트 속 숫자로 들어간 것이다.


 

반응형

 

4 while — 조건식만 있는 반복문
while(조건식) { 실행할 코드 }

while문은 for문보다 구조가 더 단순하다. 괄호 안에 조건식 하나만 들어간다. 초기식과 증감식은 while 바깥과 안쪽에 각자 따로 써야 한다.

<script> let n = prompt("0보다 큰 정수를 입력하세요", 0); n = parseInt(n); // 문자열을 숫자로 바꿈 let i=0, sum=0; while(i<=n) { // i가 0에서 n까지 반복 sum += i; i++; } document.write("0에서 " + n + "까지 합은 " + sum); </script>

여기서 let i=0, sum=0;이 초기식 역할, i<=n이 조건식, i++이 증감식이다. 다만 for처럼 한 줄에 모아두지 않고 각자 흩어져 있을 뿐, 하는 일은 완전히 똑같다.


5 while과 for는 같은 것을 다르게 쓴 것
for 스타일과 while 스타일 비교

초기식·조건식·증감식이라는 세 요소만 있으면 어떤 반복문으로도 똑같은 결과를 만들 수 있다. n=5일 때 0+1+2+3+4+5=15를 구하는 코드를 두 스타일로 비교하면 다음과 같다.

for 스타일
for(let i=0; i<=n; i++){
  sum += i;
}
while 스타일
let i=0;
while(i<=n){
  sum += i;
  i++;
}
※ 선택 기준: 반복 횟수가 "몇 번"인지 미리 뻔히 보이면 for가 한눈에 들어와 편하다. 반복을 "언제 멈출지"가 더 중요한 조건 중심 로직이면 while이 자연스럽다.

6 do-while — 조건을 뒤에서 검사한다
do { 코드 } while(조건식); — 최소 1회 실행 보장

do-whilewhile과 하는 일은 같지만 조건 검사 위치가 코드 뒤다. 즉 조건이 거짓이더라도 do{} 안의 코드는 일단 한 번은 실행되고 나서 조건을 확인한다.

<script> let n = prompt("0보다 큰 정수를 입력하세요", 0); n = parseInt(n); // 문자열 n을 숫자로 바꿈 let i=0, sum=0; do { sum += i; i++; } while(i<=n); // i가 0~n까지 반복 document.write("0에서 " + n + "까지 합은 " + sum); </script>
while — 조건이 먼저
조건 검사 → (참이면) 코드 실행
→ 조건이 처음부터 거짓이면 코드는 0번 실행
do-while — 실행이 먼저
코드 실행 → 조건 검사 (참이면 반복)
→ 조건이 처음부터 거짓이어도 코드는 최소 1번 실행
※ 예를 들어 사용자가 prompt에서 취소를 누르거나 n=0을 넣어도, do-whilesum += 0; i++;이 한 번은 실행된 뒤에 조건을 본다. 반면 while은 애초에 i<=n이 거짓이면 안쪽 코드를 아예 건드리지 않는다.

7 셋 중 뭘 언제 쓰나
선택 기준을 한 문장으로

세 반복문 모두 "조건이 맞는 동안 반복"이라는 본질은 같다. 실무에서는 아래 기준으로 고른다.

1
for — 반복 횟수가 정해져 있을 때"10부터 35까지 5씩" 처럼 시작·끝·증가폭이 미리 보이는 경우
2
while — 조건이 중심일 때몇 번 반복될지보다 "이 조건이 유지되는 동안"이 더 중요한 경우
3
do-while — 무조건 한 번은 실행해야 할 때메뉴 출력, 사용자 입력 검증처럼 "일단 한 번 보여주고 나서" 조건을 따지는 경우
※ 세 가지 다 배워두는 이유: 어떤 반복문을 먼저 떠올렸든, 다른 두 개로도 똑같이 바꿔 쓸 수 있어야 진짜로 이해한 것이다.

8 prompt + parseInt — 입력값은 왜 숫자로 바꿔야 하나
prompt()가 돌려주는 값은 항상 문자열이다

prompt("0보다 큰 정수를 입력하세요", 0)는 사용자가 입력창에 무엇을 쳐도 항상 문자열("string")로 돌려준다. 사용자가 화면에서 5를 입력해도 실제로는 "5"라는 글자다.

let n = prompt(...); // n = "5" (문자열!) n + 3 // "53" ← 숫자 덧셈이 아니라 글자 이어붙이기 let n = parseInt(prompt(...)); // n = 5 (숫자) n + 3 // 8 ← 정상적인 덧셈

그래서 n = parseInt(n); 한 줄이 꼭 필요하다. 이 줄이 없으면 i<=n 같은 조건식이나 sum += i 같은 계산이 숫자 덧셈이 아니라 문자열 이어붙이기로 동작해 엉뚱한 결과가 나온다.

parseInt("5")는 5(숫자)를, Number("5")도 마찬가지로 5(숫자)를 돌려준다. 정수만 다룰 땐 parseInt가 흔히 쓰인다.

9 자주 하는 실수
실수 증상 해결
증감식(i++, size+=5)을 빠뜨림 조건이 영원히 참 → 브라우저가 멈추는 무한루프 반복문 안에서 조건에 쓰인 변수를 반드시 변경
조건 <=<를 헷갈림 한 번 더 돌거나 마지막 값이 빠지는 경계 오류 "그 값 포함?"을 먼저 정하고 <=/< 선택
do-while}while(조건) 뒤 세미콜론 생략 문법 에러(SyntaxError)로 스크립트 전체가 멈춤 } while(조건); — 세미콜론 필수 암기
prompt 결과를 parseInt 없이 바로 계산 "5"+38이 아니라 "53"으로 이어붙음 parseInt(n) 또는 Number(n)으로 변환 후 계산
for문 안에서 초기식 변수를 let 없이 재사용 시도 바깥 스코프와 충돌하거나 예상 밖 값 참조 루프 전용 변수는 for(let i=...)처럼 매번 새로 선언

핵심 한 줄 요약

for(초기식;조건식;증감식)횟수가 정해진 반복에 적합, 세 요소가 한 줄에
while(조건식)조건이 중심, 초기식·증감식은 바깥/안쪽에 따로
do{ }while(조건);조건을 뒤에서 검사 → 최소 1회 실행 보장
증감식 누락무한루프의 가장 흔한 원인
prompt + parseInt입력값은 문자열이므로 계산 전 반드시 숫자 변환

Tags

#JavaScript #반복문 #for문 #while문 #dowhile #루프 #초기식 #조건식 #증감식 #prompt #parseInt #무한루프 #자바스크립트기초 #JS #웹개발
▼ 티스토리 태그 입력란 복사용
JavaScript, 반복문, for문, while문, dowhile, 루프, 초기식, 조건식, 증감식, prompt, parseInt, 무한루프, 자바스크립트기초, JS, 웹개발
반응형

댓글