JavaScript 반복문 완전 가이드 - for, while, for...of, forEach 마스터하기
반복문이란?
반복문은 특정 코드를 여러 번 반복해서 실행하는 JavaScript의 제어문입니다. 같은 작업을 반복해야 할 때 코드의 중복을 피하고 효율적으로 프로그램을 작성할 수 있게 해줍니다. JavaScript에서는 주로 for문, while문, for...of문, forEach문을 사용합니다.
반복문 for문
for문은 가장 기본적인 반복문으로, 초기값, 조건식, 증감식을 한 곳에 명시하여 반복 횟수를 제어할 수 있습니다. 조건식이 true인 동안 반복 실행되며, 주로 정해진 횟수만큼 반복할 때 사용합니다.
for문 문법
// 문법
for (초기값; 조건식; 증감식) {
실행문....
}
// 사용법
for (let i = 0; i < 5; i++) {
console.log("반복문 실행: " + i);
}
for문 기본 예제
for (let i = 1; i <= 5; i++) {
console.log("숫자: " + i);
}
console.log("반복 완료");
실행 결과:
숫자: 1
숫자: 2
숫자: 3
숫자: 4
숫자: 5
반복 완료
초기값 i = 1
부터 시작하여 조건식 i <= 5
가 true인 동안 반복 실행됩니다. 매 반복마다 증감식 i++
에 의해 i값이 1씩 증가하며, i가 6이 되면 조건식이 false가 되어 반복을 종료하고 '반복 완료'가 출력됩니다.
배열과 for문 예제
let fruits = ["사과", "바나나", "오렌지", "포도"];
for (let i = 0; i < fruits.length; i++) {
console.log((i + 1) + "번째 과일: " + fruits[i]);
}
console.log("과일 목록 출력 완료");
실행 결과:
1번째 과일: 사과
2번째 과일: 바나나
3번째 과일: 오렌지
4번째 과일: 포도
과일 목록 출력 완료
배열의 인덱스는 0부터 시작하므로 i = 0
으로 초기화하고, i < fruits.length
조건으로 배열의 모든 요소에 접근합니다. 출력할 때는 i + 1
을 사용하여 1번째부터 표시합니다.
반복문 while문
while문은 조건식이 true인 동안 반복 실행되는 반복문입니다. for문과 달리 초기값과 증감식을 별도로 관리해야 하며, 반복 횟수가 정해지지 않은 상황에서 주로 사용합니다.
while문 문법
// 문법
while (조건식) {
실행문....
증감식; // 무한루프 방지를 위해 필요
}
// 사용법
let i = 0;
while (i < 3) {
console.log("while 반복: " + i);
i++;
}
while문 기본 예제
let count = 1;
while (count <= 5) {
console.log("카운트: " + count);
count++;
}
console.log("카운팅 완료");
실행 결과:
카운트: 1
카운트: 2
카운트: 3
카운트: 4
카운트: 5
카운팅 완료
count변수를 1로 초기화하고 count <= 5
조건이 true인 동안 반복됩니다. 반복문 내부에서 count++
로 값을 증가시켜 무한루프를 방지하며, count가 6이 되면 조건이 false가 되어 반복을 종료합니다.
사용자 입력을 받는 while문 예제
let password = "";
let attempts = 0;
const correctPassword = "1234";
while (password !== correctPassword && attempts < 3) {
password = prompt("비밀번호를 입력하세요 (시도: " + (attempts + 1) + "/3)");
attempts++;
if (password === correctPassword) {
console.log("로그인 성공!");
} else if (attempts >= 3) {
console.log("로그인 실패: 시도 횟수 초과");
}
}
이 예제는 올바른 비밀번호를 입력하거나 3번의 시도가 모두 실패할 때까지 반복됩니다. 조건식에 논리연산자(&&)를 사용하여 두 조건을 모두 만족해야 반복이 계속되도록 했습니다.
반복문 for...of문
for...of문은 ES6에서 도입된 반복문으로, 배열이나 문자열 같은 반복 가능한 객체의 값을 순회할 때 사용합니다. 인덱스가 아닌 값 자체에 직접 접근할 수 있어 코드가 간결하고 읽기 쉽습니다.
for...of문 문법
// 문법
for (변수 of 반복가능한객체) {
실행문....
}
// 사용법
let numbers = [1, 2, 3];
for (let num of numbers) {
console.log(num);
}
for...of문 배열 예제
let colors = ["빨강", "파랑", "노랑", "초록"];
for (let color of colors) {
console.log("색상: " + color);
}
console.log("색상 출력 완료");
실행 결과:
색상: 빨강
색상: 파랑
색상: 노랑
색상: 초록
색상 출력 완료
for...of문은 배열의 각 요소를 color 변수에 자동으로 할당하며, 인덱스를 관리할 필요가 없어 코드가 간결합니다. 배열의 모든 요소를 순회한 후 반복을 종료합니다.
for...of문 문자열 예제
let message = "Hello";
for (let char of message) {
console.log("문자: " + char);
}
console.log("문자 출력 완료");
실행 결과:
문자: H
문자: e
문자: l
문자: l
문자: o
문자 출력 완료
문자열도 반복 가능한 객체이므로 for...of문으로 각 문자에 접근할 수 있습니다. 문자열의 모든 문자를 하나씩 순회하며 처리할 수 있습니다.
반복문 forEach문
forEach문은 배열의 내장 메서드로, 배열의 각 요소에 대해 제공된 함수를 실행합니다. 함수형 프로그래밍 스타일로 배열을 처리할 때 사용하며, 콜백 함수를 통해 각 요소와 인덱스에 접근할 수 있습니다.
forEach문 문법
// 문법
배열.forEach(function(요소, 인덱스, 배열) {
실행문....
});
// 화살표 함수 사용법
배열.forEach((요소, 인덱스) => {
실행문....
});
forEach문 기본 예제
let numbers = [10, 20, 30, 40];
numbers.forEach(function(number, index) {
console.log(index + "번째 숫자: " + number);
});
console.log("숫자 출력 완료");
실행 결과:
0번째 숫자: 10
1번째 숫자: 20
2번째 숫자: 30
3번째 숫자: 40
숫자 출력 완료
forEach문은 콜백 함수의 첫 번째 매개변수로 배열 요소의 값을, 두 번째 매개변수로 인덱스를 제공합니다. 배열의 모든 요소에 대해 콜백 함수가 실행됩니다.
forEach문 화살표 함수 예제
let students = ["김철수", "이영희", "박민수"];
students.forEach((student, index) => {
console.log(`${index + 1}번 학생: ${student}`);
});
// 더 간단한 형태
students.forEach(student => console.log("학생 이름: " + student));
실행 결과:
1번 학생: 김철수
2번 학생: 이영희
3번 학생: 박민수
학생 이름: 김철수
학생 이름: 이영희
학생 이름: 박민수
ES6의 화살표 함수와 템플릿 리터럴을 사용하면 더 간결하게 작성할 수 있습니다. 인덱스가 필요하지 않다면 첫 번째 매개변수만 사용할 수 있습니다.
반복문 비교 및 선택 기준
📊 반복문 비교표
반복문 | 장점 | 단점 | 사용 상황 |
---|---|---|---|
for | 명확한 반복 횟수 제어 | 문법이 복잡 | 정해진 횟수 반복 |
while | 유연한 조건 설정 | 무한루프 위험 | 조건 기반 반복 |
for...of | 간결한 문법 | 인덱스 접근 어려움 | 배열/문자열 순회 |
forEach | 함수형 스타일 | break 사용 불가 | 배열 처리 |
🎯 상황별 반복문 선택
for문 사용 예시
// 구구단 출력
for (let i = 2; i <= 9; i++) {
console.log(`${i}단:`);
for (let j = 1; j <= 9; j++) {
console.log(`${i} x ${j} = ${i * j}`);
}
}
// 배열 역순 출력
let arr = [1, 2, 3, 4, 5];
for (let i = arr.length - 1; i >= 0; i--) {
console.log(arr[i]);
}
while문 사용 예시
// 랜덤 숫자 맞히기 게임
let targetNumber = Math.floor(Math.random() * 10) + 1;
let guess = 0;
let attempts = 0;
while (guess !== targetNumber) {
guess = parseInt(prompt("1-10 사이의 숫자를 맞춰보세요:"));
attempts++;
if (guess === targetNumber) {
console.log(`정답! ${attempts}번 만에 맞췄습니다.`);
} else {
console.log("틀렸습니다. 다시 시도하세요.");
}
}
for...of문 사용 예시
// 쇼핑 목록 출력
let shoppingList = ["우유", "빵", "계란", "사과"];
console.log("쇼핑 목록:");
for (let item of shoppingList) {
console.log("- " + item);
}
// 문자열에서 모음 찾기
let text = "Hello World";
let vowels = "aeiouAEIOU";
for (let char of text) {
if (vowels.includes(char)) {
console.log(`모음 발견: ${char}`);
}
}
forEach문 사용 예시
// 배열 요소 변환
let prices = [1000, 2000, 3000];
let discountedPrices = [];
prices.forEach(price => {
discountedPrices.push(price * 0.8); // 20% 할인
});
console.log("할인된 가격:", discountedPrices);
// 조건부 처리
let scores = [85, 92, 78, 96, 88];
scores.forEach((score, index) => {
if (score >= 90) {
console.log(`${index + 1}번째 학생: A등급 (${score}점)`);
} else if (score >= 80) {
console.log(`${index + 1}번째 학생: B등급 (${score}점)`);
}
});
마무리
JavaScript의 반복문은 효율적인 프로그래밍을 위한 필수 도구입니다.
- for문: 명확한 반복 횟수가 있을 때, 복잡한 제어가 필요할 때
- while문: 조건에 따른 반복이 필요할 때, 반복 횟수가 불확실할 때
- for...of문: 배열이나 문자열의 값만 필요할 때, 간결한 코드를 원할 때
- forEach문: 함수형 프로그래밍 스타일로 배열을 처리할 때
각 반복문의 특성을 이해하고 상황에 맞게 선택하면 더욱 효율적이고 읽기 쉬운 코드를 작성할 수 있습니다. 특히 무한루프를 방지하기 위해 종료 조건을 명확히 설정하는 것이 중요합니다.