반복문은 특정 작업을 반복적으로 수행할 때 사용합니다. 자바에서는 작업의 범위나 조건에 따라 다양한 반복문을 제공합니다. 이를 통해 동일한 코드를 반복해서 작성하지 않고 효율적으로 코드를 작성할 수 있습니다.
반복문에는 for 문, while 문, do-while 문이 있습니다.
for 문은 대표적인 반복문의 형태로, 반복 횟수가 정해져 있거나 일정 범위 내에서 작업을 반복할 때 사용합니다.
for 문의 기본 구조는 다음과 같습니다.
for (초깃값; 조건식; 증감식) {
실행문; // 반복 실행할 명령문
}
예제:
public class Main {
public static void main(String[] args) {
for (int i = 1; i <= 3; i++) {
System.out.println("현재 값: " + i);
}
}
}
출력:
현재 값: 1
현재 값: 2
현재 값: 3
for 문에서 반복을 제어할 때 주로 증감 연산자를 사용합니다.
++): 값을 1씩 증가시킵니다.--): 값을 1씩 감소시킵니다.증감 연산자가 변수 앞에 있을 때는 전위 연산자, 변수 뒤에 오면 후위 연산자라고 합니다.
i++: i값을 사용한 후에 i+1 수행i--: i값을 사용한 후에 i-1 수행++i: i+1을 한 후에 i값 사용--i: i-1을 한 후에 i값 사용예제1:
public class Main {
public static void main(String[] args) {
for (int i = 3; i > 0; i--) {
System.out.println("역순 값: " + i);
}
}
}
출력:
역순 값: 3
역순 값: 2
역순 값: 1
예제2:
public class Main {
public static void main(String[] args) {
int num1 = 5;
int num2 = 5;
int result1 = num1++;
int result2 = ++num2;
System.out.println(result1);
System.out.println(result2);
System.out.println(num1);
System.out.println(num2);
}
}
출력:
5
6
6
6
num1 변수 뒤에 ++ 연산자가 있으므로 num1 변수의 값을 사용한 후에 num+1을 수행합니다. 따라서 현재 num1 변수의 값을 result1 변수에 저장하고 나서 num1 변수의 값을 1 증가시킵니다. 따라서 result1 변수의 값을 출력하면 5가 나오고, num1을 출력하면 6이 나옵니다.num2 변수 앞에 ++ 연산자가 있으므로 num2+1을 수행한 후에 num2 변수의 값을 사용합니다. 따라서 num2 변수의 값을 1 증가시킨 후에 num2 변수의 값을 result2 변수에 저장합니다. 따라서 result2 변수와 num2 변수의 값을 출력하면 모두 6이 나옵니다.for 문을 사용하면 반복적으로 계산을 수행할 수 있습니다.
예제(1부터 10까지 합 계산하기):
public class Main {
public static void main(String[] args) {
int sum = 0; // sum 변수 선언 및 초기화
for (int i = 1; i <= 10, i++) {
sum += i; // 합계 계산
}
System.out.println("1부터 10까지의 합: " + sum);
}
}
출력:
1부터 10까지의 합: 55
구구단은 for 문을 사용하여 쉽게 구현할 수 있습니다.
예제:
public class Main {
public static void main(String[] args) {
int dan = 5; // 출력할 구구단 단수
for (int i = 1; i <= 9; i++) {
System.out.println(dan + " x " + i + " = " + (dan * i));
}
}
}
출력(5단):
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
...
5 x 9 = 45
중첩 반복문은 반복문 안에 또 다른 반복문이 포함된 형태로, 여러 층의 작업을 반복할 때 사용합니다.
예제(구구단 전체 출력):
// 구구단 2 ~ 9단 출력
public class Main {
public static void main(String[] args) {
for (int dan = 2; dan <= 9; dan++) {
System.out.println(dan + "단:");
for (int i = 1; i <= 9; i++) {
System.out.println(dan + " x " + i + " = " + (dan * i));
}
System.out.println(); // 단 간격 띄우기
}
}
}
출력:
2단:
2 x 1 = 2
2 x 2 = 2
...
2 x 9 = 18
...
9단:
9 x 1 = 9
9 x 2 = 18
...
9 x 9 = 81
while 문은 조건이 참일 동안 코드를 반복 실행합니다. 반복 횟수를 정확히 알 수 없거나, 조건에 따라 반복 여부가 결정되는 경우에 적합합니다.
while 문의 기본 구조는 다음과 같습니다.
while (조건식) {
실행문; // 반복 실행할 명령문
}
while 블록이 실행됩니다.예제:
public class Main {
public static void main(String[] args) {
int i = 1;
while (i <= 3) {
System.out.println("현재 값: " + i);
i++;
}
}
}
출력:
현재 값: 1
현재 값: 2
현재 값: 3
do-while 문은 조건을 확인하기 전에 코드를 한 번은 반드시 실행합니다. 조건 검사는 실행 후에 이루어지므로, 최소 한 번의 실행이 보장됩니다.
do-while 문의 기본 구조는 다음과 같습니다.
do {
실행문; // 최소 한 번 실행할 명령문
} while (조건식);
do 블록이 반복 실행됩니다.예제:
public class Main {
public static void main(String[] args) {
int i = 1;
do {
System.out.println("현재 값: " + i);
i++;
} while (i <= 3);
}
}
출력:
현재 값: 1
현재 값: 2
현재 값: 3
반복문이 끝나지 않고 무한히 반복되는 경우가 있는데, 이를 무한 반복문 또는 무한 루프라고 합니다. 조건을 잘못 작성해서 발생하는 오류인 경우도 있지만, 프로그램에서 의도적으로 무한 반복문을 작성하기도 합니다. 예를 들어, 사용자 입력으로 프로그램을 진행하는 경우 사용자 입력이 들어올 때까지 대기하는 경우가 그렇습니다.
무한 반복문은 종료 조건 없이 반복을 계속하는 구조입니다. 주로 특정 조건에서 break로 반복을 종료하거나, 이벤트 기반 작업에서 사용됩니다.
while (true) {
// 반복 실행할 코드
}
for (;;) {
// 반복 실행할 코드
}
예제1: while을 사용한 무한 반복
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in)
while (true) {
System.out.print("숫자를 입력하세요 (0입력 시 종료): ");
int input = scanner.nextInt();
if (input == 0) {
System.out.println("프로그램을 종료합니다.");
break; // 조건에 따라 무한 루프 종료
}
System.out.println("입력한 숫자: " + input);
}
scanner.close();
}
}
출력:
숫자를 입력하세요 (0입력 시 종료): 5
입력한 숫자: 5
숫자를 입력하세요 (0입력 시 종료): 3
입력한 숫자: 3
숫자를 입력하세요 (0입력 시 종료): 0
프로그램을 종료합니다.
예제2: for를 사용한 무한 반복
public class Main {
public static void main(String[] args) {
for (;;) {
System.out.println("무한 반복 실행 중...");
}
}
}
break로 종료 로직을 포함해서 작성해야 합니다.예제3: 이벤트 기반 무한 반복
무한 반복문은 종종 키 입력, 네트워크 수신 또는 특정 이벤트를 기다릴 때 사용됩니다.
import java.util.Scanner;
public class SimpleInfiniteLoop {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("종료하려면 'exit'를 입력하세요.");
while (true) {
System.out.print("입력: ");
String input = scanner.nextLine();
if (input.equals("exit")) { // 입력값이 정확히 "exit"일 때 종료
System.out.println("프로그램을 종료합니다.");
break;
}
System.out.println("입력된 값: " + input);
}
scanner.close();
}
}
출력:
종료하려면 'exit'를 입력하세요.
입력: Hello
입력된 값: Hello
입력: 123
입력된 값: 123
입력: exit
프로그램을 종료합니다.
프로그램 흐름 제어는 반복문을 실행 중 특정 조건에 따라 반복을 종료하거나 일부 구간을 건너뛰는 작업입니다. 자바에서는 이를 위해 break와 continue 키워드를 사용합니다.
break로 반복문 탈출하기break 키워드는 반복문을 강제로 종료할 때 사용됩니다. 반복문 안에서 break를 만나면 조건과 상관없이 반복이 즉시 종료됩니다.
while에서 break 사용:while (true) {
실행문;
if (조건식) {
break; // 조건을 만족하면 반복문 종료
}
}
for에서 break 사용:for (초기식; 조건식; 증감식) {
if (조건식) {
break; // 조건을 만족하면 반복문 종료
}
실행문;
}
예제: 특정 조건에서 반복 종료하기
public class BreakExample {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i > 5) {
break; // i가 5보다 크면 반복 종료
}
System.out.println("현재 값: " + i);
}
}
}
출력:
현재 값: 1
현재 값: 2
현재 값: 3
현재 값: 4
현재 값: 5
continue로 반복 구간 건너뛰기continue 키워드는 특정 반복만 건너뛰고 다음 반복으로 넘어가는 데 사용됩니다. 반복문 안에서 continue를 만나면 해당 반복의 나머지 코드는 건너뛰고, 조건 검사로 넘어갑니다.
while에서 continue 사용:while (조건식) {
if (특정 조건) {
continue; // 조건을 만족하면 나머지 코드 건너뛰기
}
실행문; // 조건을 만족하지 않을 때 실행
}
for에서 continue 사용:for (초기식; 조건식; 증감식) {
if (특정 조건) {
continue; // 특정 조건에서 구간 건너뛰기
}
실행문; // 조건을 만족하지 않을 때만 실행
}
예제1: 짝수만 출력하기
public class ContinueExample {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if (i % 2 != 0) {
continue; // 홀수일 경우 건너뛰기
}
System.out.println("짝수: " + i);
}
}
}
출력:
짝수: 2
짝수: 4
짝수: 6
짝수: 8
짝수: 10
예제2: while에서 continue 사용하기
public class WhileContinueExample {
public static void main(String[] args) {
int i = 0;
while (i < 10) {
i++;
if (i % 3 == 0) {
continue; // 3의 배수는 건너뛰기
}
System.out.println("현재 값: " + i);
}
}
}
출력:
현재 값: 1
현재 값: 2
현재 값: 4
현재 값: 5
현재 값: 7
현재 값: 8
현재 값: 10