반복문이란?
반복문은 특정 조건이 만족되는 동안 또는 지정된 횟수만큼 특정 코드 블록을 반복 실행하는 구문입니다. 이를 통해 동일한 작업을 여러 번 수행할 수 있으며, 코드의 중복을 피하고 프로그램의 효율성을 높일 수 있습니다. 반복문의 종류는 for문, while문, do-while문이 있습니다.
반복문의 종류
Java에서 사용하는 반복문에 대해 각각 살펴보겠습니다.
for문
for 반복문은 초기화 부분에서 시작하여, 주어진 조건식 부분이 참(true)으로 평가될 때 코드 블록을 반복 실행합니다. 초기화 부분, 조건식 부분, 증감식(업데이트) 부분으로 구성되어 있으며, 반복의 횟수와 범위를 명확하게 제어할 수 있습니다.
for문의 구조는 아래와 같은 형식의 구조를 갖습니다.
초기화
- 반복문 실행 전 필요한 변수를 선언 및 초기화를 합니다. 초기화 부분은 for문이 시작할 때 단 한번만 실행됩니다.
- for문의 초기화부분에서 선언한 변수는 for문 내에서만 사용할 수 있습니다.
- 쉼표( , )를 사용하여 여러 변수를 선언하고 초기화할 수 있습니다. 단 모든 변수는 같은 타입이어야 합니다.
조건식
- 반복문의 실행 여부를 평가하는 부분입니다. 조건 검사는 각 반복이 실행되기 전에 평가를 진행하며, 해당 조건이 참(true)인 경우 for문 내의 코드 블록이 실행되고, 조건이 거짓(false)이라면 for문이 종료됩니다.
증감식
- 반복문 내의 코드블록이 실행 된 후, 다음 반복으로 넘어가기전에 실행됩니다. 조건 검사는 각 반복 시작 전에 실행되는 부분이라면, 해당 부분은 각 반복이 종료된 후 실행되는 부분입니다.
- 주로 반복문 내의 변수의 값을 조정하며, 증가(++) 또는 감소(--) 연산자 등을 사용하여 반복 변수의 값을 조정합니다. 매 반복 후 반복 변수의 값이 증가 또는 감소하여 언젠가는 반복문을 벗어나게 됩니다.
- 쉼표(,)를 사용하여 여러 변수의 값을 동시에 변경할 수 있습니다.
아래의 표는 위 그림의 코드가 실행 시 진행되는 단계를 나타낸 표입니다.
생략 가능
for문의 각 부분은 모두 생략이 가능합니다. 생략을 진행할때는 해당 부분은 비워두고 세미콜론( ; )은 정상적으로 표기합니다. 다음은 초기화, 조건식, 증감식 모두 생략한 for문입니다.
for( ; ; ) {
}
조건식 부분이 생략 될 경우, 해당 for문의 조건이 항상 참(true)으로 간주됩니다. 따라서 무한 반복문이 되므로, if문과 break문을 사용하여 특정 조건이 만족될 때 반복문을 반드시 종료할 수 있도록 해야 합니다.
초기화와 증감식의 쉼표( , ) 사용
초기화에서 쉼표를 사용하여 여러 변수를 초기화 및 선언할 수 있고, 증감식에서 쉼표를 사용하여 여러 변수의 값을 동시에 변경 할 수 있습니다. 다음은 쉼표를 사용한 for문 예제입니다.
for (int i = 0, j = 10; i <= 10 && j >= 0; i++, j--) {
System.out.println("i = " + i + ", j = " + j);
}
- 초기화 : 같은 타입의 변수만 쉼표( , )를 통해 사용 가능합니다. 위 예제는 int형 타입의 변수인 i와 j를 선언 및 초기화 한 내용입니다.
- 증감식 : 쉼표( , )를 통해 변수의 값을 동시에 변경합니다. 위 예제는 i의 값을 1 증가시키고, j의 값을 1 감소시키는 내용입니다.
실습 예제
다음은 사용자의 입력 값(2~9)에 따라 하나의 단의 구구단을 출력하는 예제입니다.
- 실습 예제 -
import java.util.Scanner;
public class Repeat01 {
public static void main(String[] args) {
System.out.println("출력할 구구단의 단수를 입력해주세요.");
// Scanner 클래스를 이용하여 콘솔로부터 사용자 입력을 받을 수 있는 scanner 객체를 생성합니다.
Scanner scanner = new Scanner(System.in);
// 사용자로부터 단수를 정수형으로 입력받습니다.
int number = scanner.nextInt();
// 입력받은 단수가 2이상 9이하일때, 해당 단수의 구구단을 출력합니다.
if(number >= 2 && number <= 9) {
for (int i = 1; i <= 9; i++) {
System.out.println(number + " * " + i + " = " + (number * i));
}
} else {
System.out.println("잘못된 단수입니다.");
}
}
}
- 출력 결과 -
출력할 구구단의 단수를 입력해주세요.
7
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
💡 Scanner 클래스는 Java의 java.util 패키지에 포함되어 있는 클래스로, 사용자로부터 콘솔 입력을 받거나, 파일 내용을 읽을 때 자주 사용됩니다. next(), nextInt(), nextDouble(), nextLine() 등의 메서드를 통해 사용자에게 입력값을 받을 수 있습니다. 클래스 및 메서드에 대한 내용은 추후에 다룰 내용이니 사용자에게 입력받기 위한 기능이라고 생각하시면 되겠습니다.
while문
while 반복문은 주어진 조건이 참(true)인 동안 코드 블록을 반복해서 실행하는 구문입니다. 이는 조건이 거짓(false)이 될 때까지 반복됩니다. 반복 횟수가 명확하지 않거나, 조건에 따른 반복이 필요할 때 주로 사용됩니다.
while문의 구조는 아래와 같은 형식의 구조를 갖습니다.
조건식
- 조건식이 참(true)인 경우에만 코드 블록을 실행합니다. 반복문의 시작 부분에서 조건식을 평가하며, 이 조건이 거짓(false)으로 평가될 때까지 반복 실행됩니다.
- while 반복문 내에서 조건식이 언젠가는 거짓이 되도록 만들어야 합니다. 그렇지 않으면 무한 루프에 빠질 위험이 있습니다. 이를 위해 반복문 내에서 조건식에 영향을 주는 변수의 값을 적절히 변경하는 로직을 포함해야 합니다.
생략 불가능
while문의 조건식은 for문과 다르게 생략이 불가능합니다. for문은 조건식을 생략할 경우 항상 참(true)로 간주되는데, while문은 생략이 아닌 조건식에 true를 직접 사용하여, 무한 반복문을 구현할 수 있습니다.
while(true) {
}
실습 예제
다음은 사용자가 입력한 정수의 총합을 구하는 예제입니다.
- 실습 예제 -
import java.util.Scanner;
public class Repeat02 {
public static void main(String[] args) {
int sum = 0; // 입력받은 정수의 총합을 저장할 변수를 선언 및 초기화합니다.
System.out.println("덧셈을 진행할 정수를 입력해주세요. 종료하려면 0번을 입력해주세요.");
// Scanner 클래스를 이용하여 콘솔로부터 사용자 입력을 받을 수 있는 scanner 객체를 생성합니다.
Scanner scanner = new Scanner(System.in);
while(true) {
// 사용자로부터 정수를 입력받습니다.
int number = scanner.nextInt();
// 입력받은 수가 0일 경우 while문을 종료합니다. 아닐 경우 총합 변수에 더합니다.
if(number == 0)
break;
else
sum += number;
}
System.out.println("입력한 수의 총 합은 " + sum + " 입니다.");
}
}
- 출력 결과 -
덧셈을 진행할 정수를 입력해주세요. 종료하려면 0번을 입력해주세요.
3
4
1
7
0
입력한 수의 총 합은 15 입니다.
do-while문
do-while 반복문은 조건을 검사하기 전에 반드시 최소 한 번은 반복문 내의 코드 블록을 실행합니다. 이는 while문과 비슷하지만, do-while문은 조건 검사를 반복문의 끝에서 수행한다는 것입니다. 이로 인해, 조건의 참(true)/거짓(false) 여부와 상관없이 반복문 내의 코드 블록이 최소 한 번 실행됨을 보장합니다.
do-while문의 구조는 아래와 같은 형식의 구조를 갖습니다.
실습 예제
다음은 사용자로부터 비밀번호를 입력받아 일치할 때까지 반복하는 예제입니다.
- 실습 예제 -
import java.util.Scanner;
public class Repeat03 {
public static void main(String[] args) {
// Scanner 클래스를 이용하여 콘솔로부터 사용자 입력을 받을 수 있는 scanner 객체를 생성합니다.
Scanner scanner = new Scanner(System.in);
// 설정된 비밀번호를 선언 및 초기화 합니다.
String password = "wooZzing";
// 사용자로부터 입력 받은 비밀번호를 저장할 변수를 선언합니다.
String input;
do {
System.out.println("비밀번호를 입력하세요: ");
input = scanner.nextLine(); // newxtLine()은 한 줄의 문자열 입력을 읽습니다.
// equals()은 객체의 내용을 비교합니다.
if (!input.equals(password)) {
System.out.println("비밀번호가 일치하지 않습니다. 다시 입력해주세요.");
}
} while (!input.equals(password));
System.out.println("비밀번호 확인 완료.");
}
}
- 출력 결과 -
비밀번호를 입력하세요:
woozing
비밀번호가 일치하지 않습니다. 다시 입력해주세요.
비밀번호를 입력하세요:
woozzing
비밀번호가 일치하지 않습니다. 다시 입력해주세요.
비밀번호를 입력하세요:
wooZzing
비밀번호 확인 완료.
향상된 for문
for문을 좀 더 간결하게 사용할 수 있게 Java 5부터 도입된 반복문으로, 배열이나 컬렉션을 순회할 때 보다 간결하게 코드를 작성할 수 있게 해줍니다. 이 구문은 컬렉션의 모든 요소를 순회하면서 각 요소에 대해 블록 내의 코드를 실행할 때 사용됩니다.
향상된 for문의 구조는 아래와 같은 형식의 구조를 갖습니다.
- 타입 : 순회할 배열 또는 컬렉션의 요소 타입이어야 합니다.
- 변수명 : 현재 순회 중인 배열 또는 컬렉션의 각 요소를 반복마다 저장 할 변수입니다.
- 순회할 배열 또는 컬렉션 : 순회할 대상입니다.
💡 향상된 for 문을 사용할 때, 반복문 내에서 개별 요소의 값을 읽거나 변경할 수는 있으나, 반복문을 실행하는 동안 해당 배열 또는 컬렉션에 요소를 추가하거나 삭제하는 등의 구조 자체를 변경하는 작업은 할 수 없습니다.
배열은 주로 반복문과 함께 쓰이는 데이터 구조로, 다음장에서 자세히 배울 예정이니 지금은 이해가 되지 않더라도 넘어가셔도 됩니다.
실습 예제
다음은 향상된 for문을 사용하여 배열의 평균을 구한 예제입니다.
- 실습 예제 -
public class Repeat04 {
public static void main(String[] args) {
int[] numbers = {4, 10, 36, 28, 73};
double average = 0.0;
for (int number : numbers) {
average += number;
}
average /= numbers.length;
System.out.println("해당 배열의 평균은 " + average + " 입니다.");
}
}
- 출력 결과 -
해당 배열의 평균은 30.2 입니다.
읽어주셔서 감사합니다 😊
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 07. 배열과 다차원 배열 (0) | 2024.03.27 |
---|---|
[Java] 06. 반복문의 제어 (break, continue, label) (0) | 2024.03.27 |
[Java] 04. 조건문 배우기 (if, if-else, else if, switch) (0) | 2024.03.27 |
[Java] 03. 연산자란? (우선순위, 결합규칙) (1) | 2024.03.26 |
[Java] 02. 형변환이란? (암시적 형변환, 명시적 형변환) (0) | 2024.03.26 |