Java 반복문, 왜 배워야 할까요?
프로그래밍을 하다 보면 똑같은 작업을 여러 번 반복해야 하는 경우가 자주 발생합니다. 예를 들어, 1부터 100까지 숫자를 화면에 출력하거나, 사용자로부터 10번의 입력을 받는 것과 같은 작업이죠. 이런 반복적인 작업을 반복문(Loop) 없이 일일이 코드로 작성한다면 코드가 매우 길어지고 비효율적이 됩니다.
Java에는 이러한 반복 작업을 효율적으로 처리하기 위한 두 가지 핵심적인 반복문이 있습니다. 바로 for문과 while문입니다. 이 두 가지 반복문은 프로그래밍의 기본 중의 기본이며, Java 개발자라면 반드시 숙지해야 할 필수 요소입니다.
이 글에서는 Java의 for문과 while문이 무엇인지, 어떻게 작동하는지, 그리고 실제 프로그래밍에서 어떻게 활용되는지 초보자 눈높이에 맞춰 쉽고 친절하게 설명해 드릴 것입니다. 다양한 실전 예제를 통해 반복문에 대한 이해를 높이고, 여러분의 코딩 실력을 한 단계 업그레이드할 수 있도록 돕겠습니다.
반복문의 중요성
-
코드 간결성: 반복적인 코드를 줄여 프로그램의 길이를 단축시킵니다.
-
생산성 향상: 동일한 작업을 반복적으로 수행할 때 시간을 절약하고 개발 효율성을 높입니다.
-
유지보수 용이: 코드 수정이 필요할 때 반복문 부분을 수정하는 것이 훨씬 쉽습니다.
-
논리적 사고력 향상: 반복적인 패턴을 파악하고 이를 코드로 구현하는 과정에서 논리적 사고력이 길러집니다.
이 글을 통해 얻을 수 있는 것
-
for문과while문의 기본 개념 및 문법 이해 -
각 반복문의 특징과 적절한 사용 시점 파악
-
다양한 실전 예제를 통한 반복문 활용 능력 습득
-
초보자가 흔히 저지르는 실수와 주의사항 숙지
이제 Java 반복문의 세계로 함께 떠나볼까요?
1. for 반복문: 정해진 횟수만큼 반복할 때 최고!
for 반복문은 반복 횟수가 명확하게 정해져 있을 때 가장 유용하게 사용됩니다. 예를 들어, “10번 반복해 줘” 또는 “1부터 5까지 반복해 줘”와 같이 시작과 끝, 그리고 반복 횟수를 미리 알고 있을 때 사용하기 좋습니다.
for 반복문의 기본 구조
Java의 for 반복문은 다음과 같은 구조를 가집니다.
for (초기화; 조건식; 증감식) {
// 반복 실행될 코드
}
각 부분의 의미는 다음과 같습니다.
-
초기화 (Initialization): 반복문이 시작될 때 단 한 번만 실행됩니다. 주로 반복 횟수를 세기 위한 변수를 선언하고 초기값을 설정하는 데 사용됩니다. (예:
int i = 0;) -
조건식 (Condition): 반복문을 계속 실행할지 말지를 결정하는 식입니다. 이 조건식이
true이면 반복문 안의 코드가 실행되고,false가 되면 반복문이 종료됩니다. (예:i < 10;) -
증감식 (Increment/Decrement): 한 번의 반복이 끝날 때마다 실행됩니다. 주로 반복 횟수를 1씩 증가시키거나 감소시키는 데 사용됩니다. (예:
i++;또는i--;) -
반복 실행될 코드 (Body): 조건식이
true인 동안 반복적으로 실행될 코드 블록입니다.
for 반복문 작동 방식 (예: for (int i = 0; i < 5; i++))
for (int i = 0; i < 5; i++) { System.out.println(i); } 코드가 실행된다고 가정해 봅시다.
-
초기화:
int i = 0;이 실행됩니다. 변수i는 0으로 초기화됩니다. -
조건식:
i < 5(0 < 5) 가 평가됩니다.true이므로 반복문 안의 코드가 실행됩니다. -
반복 실행:
System.out.println(i);가 실행되어0이 출력됩니다. -
증감식:
i++;가 실행되어i는 1이 됩니다. -
조건식:
i < 5(1 < 5) 가 평가됩니다.true이므로 반복문 안의 코드가 실행됩니다. -
반복 실행:
System.out.println(i);가 실행되어1이 출력됩니다. -
증감식:
i++;가 실행되어i는 2가 됩니다. -
… 이 과정이
i가 4일 때까지 반복됩니다. -
조건식:
i < 5(4 < 5) 가 평가됩니다.true이므로 반복문 안의 코드가 실행됩니다. -
반복 실행:
System.out.println(i);가 실행되어4가 출력됩니다. -
증감식:
i++;가 실행되어i는 5가 됩니다. -
조건식:
i < 5(5 < 5) 가 평가됩니다.false이므로 반복문이 종료됩니다.
결과적으로 0부터 4까지의 숫자가 순서대로 출력됩니다.
for 반복문 실전 예제
예제 1: 1부터 10까지 합계 구하기
public class ForSumExample {
public static void main(String[] args) {
int sum = 0; // 합계를 저장할 변수 초기화
for (int i = 1; i <= 10; i++) { // i는 1부터 10까지 1씩 증가
sum += i; // sum에 현재 i 값을 더함 (sum = sum + i)
}
System.out.println("1부터 10까지의 합계: " + sum); // 결과 출력
}
}
실행 결과:
1부터 10까지의 합계: 55
예제 2: 구구단 출력 (3단)
public class ForGugudanExample {
public static void main(String[] args) {
int dan = 3; // 출력할 구구단 단
System.out.println(dan + "단:");
for (int i = 1; i <= 9; i++) { // i는 1부터 9까지 1씩 증가
System.out.println(dan + " * " + i + " = " + (dan * i));
}
}
}
실행 결과:
3단:
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
예제 3: 배열 요소 출력
public class ForArrayExample {
public static void main(String[] args) {
String[] fruits = {"사과", "바나나", "딸기", "포도"};
// 배열의 길이를 이용하여 반복 횟수 결정
for (int i = 0; i < fruits.length; i++) {
System.out.println("과일: " + fruits[i]);
}
}
}
실행 결과:
과일: 사과
과일: 바나나
과일: 딸기
과일: 포도
for-each (향상된 for문)
Java 5부터는 배열이나 컬렉션의 요소를 순회할 때 더욱 간결하게 사용할 수 있는 for-each 문 (향상된 for문)이 추가되었습니다.
for (타입 변수명 : 배열 또는 컬렉션) {
// 각 요소에 대한 작업
}
예제: for-each 문으로 배열 요소 출력
public class ForEachArrayExample {
public static void main(String[] args) {
String[] fruits = {"사과", "바나나", "딸기", "포도"};
// fruits 배열의 각 요소를 fruit 변수에 순서대로 할당
for (String fruit : fruits) {
System.out.println("과일: " + fruit);
}
}
}
실행 결과:
과일: 사과
과일: 바나나
과일: 딸기
과일: 포도
for-each 문은 코드를 훨씬 읽기 쉽게 만들어주지만, 인덱스(위치) 정보가 필요하거나 요소를 변경해야 하는 경우에는 일반 for문을 사용해야 합니다.
2. while 반복문: 조건이 만족되는 동안 계속 반복!
while 반복문은 반복 횟수가 명확하지 않거나, 특정 조건이 만족되는 동안 계속해서 반복해야 할 때 유용하게 사용됩니다. 예를 들어, “사용자가 ‘종료’를 입력할 때까지 계속 입력을 받으세요”와 같은 상황에 적합합니다.
while 반복문의 기본 구조
Java의 while 반복문은 다음과 같은 구조를 가집니다.
while (조건식) {
// 반복 실행될 코드
// (주의: 조건식을 변경하는 코드 포함 필수!)
}
for 반복문과 마찬가지로, while 반복문도 조건식을 평가하여 true이면 안의 코드를 실행하고, false가 되면 종료됩니다. for문과 가장 큰 차이점은 초기화와 증감식이 반복문 구조 안에 포함되어 있지 않다는 점입니다. 따라서 while문 안에는 반드시 조건식을 변경하여 언젠가는 false가 되도록 만드는 코드가 포함되어야 합니다. 그렇지 않으면 무한 루프(Infinite Loop)에 빠질 수 있습니다.
while 반복문 작동 방식 (예: while (count < 3))
int count = 0; while (count < 3) { System.out.println("반복 중..."); count++; } 코드가 실행된다고 가정해 봅시다.
-
초기화:
int count = 0;이 반복문 밖에서 실행됩니다. -
조건식:
count < 3(0 < 3) 이 평가됩니다.true이므로 반복문 안의 코드가 실행됩니다. -
반복 실행:
System.out.println("반복 중...");이 실행되어 “반복 중…”이 출력됩니다. -
조건식 변경:
count++;가 실행되어count는 1이 됩니다. -
조건식:
count < 3(1 < 3) 이 평가됩니다.true이므로 반복문 안의 코드가 실행됩니다. -
반복 실행:
System.out.println("반복 중...");이 실행되어 “반복 중…”이 출력됩니다. -
조건식 변경:
count++;가 실행되어count는 2가 됩니다. -
조건식:
count < 3(2 < 3) 이 평가됩니다.true이므로 반복문 안의 코드가 실행됩니다. -
반복 실행:
System.out.println("반복 중...");이 실행되어 “반복 중…”이 출력됩니다. -
조건식 변경:
count++;가 실행되어count는 3이 됩니다. -
조건식:
count < 3(3 < 3) 이 평가됩니다.false이므로 반복문이 종료됩니다.
결과적으로 “반복 중…”이라는 메시지가 세 번 출력됩니다.
while 반복문 실전 예제
예제 1: 사용자 입력 받기 (특정 입력까지)
import java.util.Scanner; // Scanner 클래스 사용을 위해 import
public class WhileInputExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = ""; // 사용자가 입력한 값을 저장할 변수
System.out.println("종료하려면 'exit'를 입력하세요.");
// input 값이 "exit"가 아닌 동안 반복
while (!input.equals("exit")) {
System.out.print("입력: ");
input = scanner.nextLine(); // 사용자로부터 한 줄 입력 받기
if (!input.equals("exit")) { // 'exit'가 아니라면 입력 내용 출력
System.out.println("입력하신 내용: " + input);
}
}
System.out.println("프로그램을 종료합니다.");
scanner.close(); // Scanner 자원 해제
}
}
실행 흐름:
사용자가 “hello”를 입력하면 “입력하신 내용: hello”가 출력되고 다시 입력을 기다립니다. 사용자가 “exit”를 입력하면 반복문이 종료되고 “프로그램을 종료합니다.”가 출력됩니다.
예제 2: 1부터 100까지 숫자 중 짝수만 출력
public class WhileEvenExample {
public static void main(String[] args) {
int num = 1; // 시작 숫자
System.out.println("1부터 100까지의 짝수:");
while (num <= 100) {
// 숫자가 짝수인지 확인 (2로 나누었을 때 나머지가 0)
if (num % 2 == 0) {
System.out.print(num + " "); // 짝수이면 출력
}
num++; // 다음 숫자로 이동
}
System.out.println(); // 줄 바꿈
}
}
실행 결과:
1부터 100까지의 짝수:
2 4 6 8 ... 98 100
예제 3: 랜덤 숫자 맞추기 게임 (간단 버전)
import java.util.Random;
import java.util.Scanner;
public class WhileGuessingGame {
public static void main(String[] args) {
Random random = new Random();
Scanner scanner = new Scanner(System.in);
int secretNumber = random.nextInt(100) + 1; // 1부터 100 사이의 랜덤 숫자 생성
int guess = 0;
int attempts = 0;
System.out.println("1부터 100 사이의 숫자를 맞춰보세요!");
// 사용자가 숫자를 맞출 때까지 반복
while (guess != secretNumber) {
System.out.print("숫자를 입력하세요: ");
guess = scanner.nextInt();
attempts++; // 시도 횟수 증가
if (guess > secretNumber) {
System.out.println("너무 큽니다!");
} else if (guess < secretNumber) {
System.out.println("너무 작습니다!");
} else {
System.out.println("정답입니다! " + attempts + "번 만에 맞추셨습니다.");
}
}
scanner.close();
}
}
실행 흐름:
프로그램이 1부터 100 사이의 숫자를 무작위로 선택합니다. 사용자는 숫자를 입력하고, 프로그램은 입력된 숫자가 정답보다 큰지, 작은지, 혹은 정답인지 알려줍니다. 사용자가 숫자를 맞출 때까지 이 과정이 반복됩니다.
do-while 반복문: 최소 한 번은 실행 보장!
do-while 반복문은 while 반복문과 비슷하지만, 반복문 안의 코드를 먼저 실행하고 나서 조건식을 검사한다는 차이가 있습니다. 따라서 do-while문은 조건식의 결과와 상관없이 최소 한 번은 반복문 안의 코드를 반드시 실행해야 할 때 사용합니다.
do {
// 반복 실행될 코드
// (주의: 조건식을 변경하는 코드 포함 필수!)
} while (조건식);
예제: 메뉴 선택 (최소 한 번은 메뉴 표시)
import java.util.Scanner;
public class DoWhileMenuExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int choice;
do {
System.out.println("\n--- 메뉴 ---");
System.out.println("1. 옵션 A");
System.out.println("2. 옵션 B");
System.out.println("0. 종료");
System.out.print("선택: ");
choice = scanner.nextInt();
switch (choice) {
case 1:
System.out.println("옵션 A를 선택하셨습니다.");
break;
case 2:
System.out.println("옵션 B를 선택하셨습니다.");
break;
case 0:
System.out.println("프로그램을 종료합니다.");
break;
default:
System.out.println("잘못된 입력입니다. 다시 선택해주세요.");
}
} while (choice != 0); // choice가 0이 아닐 동안 반복
scanner.close();
}
}
실행 흐름:
메뉴가 표시되고 사용자로부터 선택을 받습니다. 사용자가 0을 입력하기 전까지는 계속 메뉴가 반복해서 표시됩니다.
3. for vs while: 언제 어떤 반복문을 써야 할까?
for문과 while문은 둘 다 반복을 위해 사용되지만, 각각의 특징 때문에 더 적합한 상황이 있습니다.
| 구분 | for 반복문 | while 반복문 |
| :———- | :———————————————– | :————————————————— |
| 주요 용도 | 반복 횟수가 명확하게 정해져 있을 때 | 반복 횟수가 불명확하거나 조건에 따라 달라질 때 |
| 구조 특징 | 초기화, 조건식, 증감식이 한 곳에 모여 있음 | 초기화는 반복문 밖, 조건식은 반복문 안 |
| 장점 | 코드가 간결하고 가독성이 좋음 | 유연성이 높고 다양한 조건에 적용 가능 |
| 단점 | 횟수가 불명확한 경우 사용하기 번거로울 수 있음 | 반복문 안에서 조건 변경 로직 관리가 중요 |
| do-while | – | 최소 한 번 실행이 보장될 때 유용 |
언제 for를 쓸까?
-
10번 반복해야 할 때
-
배열의 모든 요소를 순회할 때 (
for-each도 좋음) -
구구단처럼 정해진 범위의 숫자를 처리할 때
언제 while을 쓸까?
-
사용자가 특정 키워드를 입력할 때까지 대기할 때
-
파일의 끝에 도달할 때까지 데이터를 읽을 때
-
어떤 상태가 만족될 때까지 반복해야 할 때 (예: 게임에서 승리할 때까지)
-
알고리즘에서 특정 조건을 만족하는 값을 찾을 때
핵심은 “반복 횟수를 미리 알고 있는가?” 입니다. 알고 있다면 for를, 그렇지 않다면 while을 고려해 보세요.
4. 반복문 사용 시 흔한 실수와 주의사항
반복문은 강력하지만, 잘못 사용하면 예상치 못한 문제를 일으킬 수 있습니다. 초보자들이 자주 저지르는 실수와 주의할 점을 알아두면 좋습니다.
1. 무한 루프 (Infinite Loop)
가장 흔하고 치명적인 실수입니다. 반복문의 조건식이 영원히 true로 유지되어 프로그램이 멈추지 않는 현상입니다.
-
원인:
-
while문이나do-while문에서 조건식을 변경하는 코드를 빼먹은 경우 -
증감식의 방향이 잘못된 경우 (예:
i < 10인데i가 계속 증가하지 않고 감소하는 경우) -
조건식 자체가 잘못 설계된 경우
-
예방:
-
while문과do-while문 안에는 반드시 조건식을 변경하는 코드가 있는지 확인하세요. -
증감식(
i++,i--)이 올바르게 작동하는지
