제어문의 종류에는 조건문과 반복문이 있는데, 반복문에는 for문, while문, do-while문이 있다.
제어문 블록이 실행 완료되었을 때 조건문일 경우는 정상 흐름으로 돌아오지만, 반복문일 경우는 제어문 처음으로 다시 되돌아가 반복 실행하는데, 이것을 루핑(looping)이라 함.
for문과 while문은 서로 변환이 가능하기 때문에 반복문을 작성할 때 어느 쪽을 선택해도 좋지만,
for문은 반복 횟수를 알고 있을 때 주로 사용하고, while문은 조건에 따라 반복할 때 주로 사용함.
while문과 do-while문의 차이점은 조건을 먼저 검사하느냐 나중에 검사하느냐일 뿐 동작 방식은 동일함.
반복문은 한 번 작성된 실행문을 여러 번 반복 실행해주기 때문에 코드를 줄여 간결하게 만들어주며 코드가 간결하면 개발 시간을 줄일 수 있고, 에러가 날 확률도 줄어듬.
for문
for문은 주어진 횟수만큼 실행문을 반복 실행할 때 적합한 반복 제어문.
// 1부터 10까지 출력
package sec02.exam01;
public class ForPrintFrom1To10Example {
public static void main(String[]args) {
for(int i=1; i<=10; i++) {
System.out.println(i);
}
}
}
// 실행 결과
// 1~10까지 줄줄이 출력
초기화식은 조건식과 실행문, 증감식에서 사용할 변수를 초기화하는 역할을 하며, 초기화식이 필요 없을 경우에는 생략 가능.
int i = 1;
for (; i<=10, i++) {...}
초기화 식이 둘 이상 있을 수 있고, 증감식 역시 둘 이상 있을 수 있음.
for (int i=0, j=100; i <= 50 && j >= 50; i++, j--) {...}
// 초기화식 조건식 증감식
초기화식에 선언된 변수는 for문 블록 내부에서 사용되는 로컬 변수로 for문을 벗어나서는 사용할 수 없음.
// 1부터 100까지 합을 출력(변수 i를 초기화식에서 선언한 로컬 변수)
package sec02.exam02;
public class ForSumFrom1To100Example1 {
public static void main(String[]args) {
int sum = 0;
for(int i=1; i <= 100; i++) {
sum += i;
}
System.out.println("1~100 합 : " + sum);
}
}
// 실행 결과
// 1~100 합 : 5050
// 1부터 100까지 합을 출력(변수 i를 초기화식에서 선언하지 않고 for문 밖에서 선언)
package sec02.exam03;
public class ForSumFrom1To100Example2 {
public static void main(String[]args) {
int sum = 0;
int i = 0;
for(i=1; i <= 100, i++) {
sum += i;
}
System.out.println("1~" + (i-1) + "합 : " + sum);
}
}
// 실행 결과
// 1~100 합 : 5050
** for문을 작성할 때 주의할 점은 초기화 식에서 루프 카운터 변수를 선언할 때 float나 double과 같은 부동 소수점(Floating-Point) 타입은 기본적으로 2진수로 수를 표현하기 때문에 0.1과 같은 10진수 소수를 정확하게 표현할 수 없고 근사치로 저장됩니다.
이러한 특성 때문에 for문의 조건식이나 증감식에 부동 소수점을 사용할 때 다음과 같은 문제가 발생할 수 있으므로, 반복 횟수를 제어하는 for문을 작성할 때는 정수(Integer) 타입을 사용하는 것이 가장 안전하고 정확함.
중첩 for문
for문은 또 다른 for문을 내포할 수 있는데 이것을 중첩for문이라 하며, 이 경우 바깥쪽 for문이 한 번 실행할 때마다 중첩된 for문은 지정된 횟수만큼 반복해서 돌다가 다시 바깥쪽 for문으로 돌아감.
// 구구단 출력하기
package sec01.exam05;
public class ForMultiplicationTableExample {
public static void main(String[]args) {
for (int m = 2; m <= 9; m++) {
System.out.println("***" + m + "단 ***");
for (int n = 1; n <= 9; n++) {
System.out.println(m + "x" + n + " = " + (m*n));
}
}
}
}
// 실행 결과
// *** 2단 ***
// 2 x 1 = 2
// 2 x 2 = 4
// 2 x 3 = 6
// 2 x 4 = 8
// 2 x 5 = 10
while문
for문이 정해진 횟수만큼 반복한다면, while문은 조건식이 true일 경우에 계속해서 반복함.
조건식에는 비교 또는 논리 연산식이 주로 오는데, 조건식이 false가 되면 반복 행위를 멈추고 while문을 종료함.
// 1부터 10까지 출력
package sec02.exam06;
public class WhilePrintFrom1To10Example {
public static void main(String[]arga) {
int i = 1;
while (i <= 10) {
System.out.println(i);
i++;
}
}
}
// 실행 결과
// 1~10까지 줄줄이 출력
// 1부터 100까지 합을 출력
package sec02.exam07;
public class WhileSumForm1To100Example {
public static void main(String[]args) {
int sum = 0;
int i = 1;
while(i <= 100) {
sum += i;
i++;
}
System.out.println("1~" + (i-1) + " 합 : " + sum);
}
}
// 실행 결과
// 1~100 합 : 5050
조건식에는 boolean 타입 변수나 true/false 값을 산출하는 어떤한 연산식이든 올 수 있지만, 조건식에 true를 사용하면 while(true){...}가 되어서 무한 루프를 돌게 되므로 while문을 빠져나가기 위한 코드가 필요함.
while문을 종료시키기 위해서는 변수의 값을 false로 만들거나, break문을 이용하면 됨.
do-while문
do-while문은 조건식에 의해 반복 실행한다는 점에서는 while문과 동일하지만, while문은 시작할 때부터 조건식을 검사하여 블록 내부를 실행할지 결정하지만, 경우에 따라서는 블록 내부의 실행문을 우선 실행하고 실행결과에 따라서 반복 실행을 계속할지 결정 할 수도 있는데 이때 do-while문을 사용하며 while( ) 뒤에 반드시 세미콜론(;)을 붙여야함.
break문
break문은 반복문인 for문, while문, do-while문의 실행 중지 할 때 사용되며, switch문에서도 break문을 사용하여 switch문을 종료함.
break문은 대개 if문과 같이 사용되어 if문의 조건식에 따라 for문과 while문을 종료할 때 사용됨.
// break로 while문 종료
public class BreakExample {
public static void main(String[]args) {
while(true) {
int num = (int) (Math.random() * 6) + 1;
System.out.println(num);
if (num == 6) {
break;
}
}
System.out.println("프로그램 종료");
}
}
// 실행 결과
// 1
// 5
// 6
// 프로그램 종료
만약 반복문이 중첩되어 있을 경우 break문은 가장 가까운 반복문만 종료하고 바깥쪽 반복문은 종료하지 않음.
중첩된 반복문에서 바깥쪽 반복문까지 종료시키려면 바깥쪽 반복문에 이름(라벨)을 붙이고, 'break 이름;'을 사용하면 됨.
// 바깥쪽 반복문 종료
package sec02.exam09;
public class BreakOutterExample {
public static void main(String[]args) {
Outter: for(char upper='A'; upper <= 'Z'; upper++) {
for(char lower='a'; lower <= 'z'; lower++) {
System.out.println(upper + "-" + lower);
if(lower == 'g' {
break Outter;
}
}
}
System.out.println("프로그램 실행 종료");
}
}
// 실행 결과
// A-a
// A-b
// A-c
// A-d
// A-e
// A-f
// A-g
// 프로그램 실행 종료
// Outter은 별칭, break뒤에 별칭 붙이면 그 라인이 break.
// Js는 break랑 가까운 라인이 break된다는 차이점이 있음.
continue문
continue문은 반복문인 for문, while문, do-while문에서만 사용되는데, 블록 내부에서 continue문이 실행되면 for문의 증감식 또는
while문, do-while문의 조건식으로 이동 함.
continue문은 반복문을 종료하지 않고 계속 반복 수행한다는 점이 break문과 다르고, break문과 마찬가지로 continue문도 대개 if문과 같이 사용되는데, 특정 조건을 만족하는 경우에 continue문을 실행해서 그 이후의 문장을 실행하지 않고 다음 반복으로 넘어감.
// continue를 사용한 for문
package sec02.exam10;
public class ContinueExample {
public static void main(String[]args) {
for(int i=1; i<=10; i++) {
if(i%2 != 0) { // 2로 나눈 나머지가 0이 아닐 경우, 즉 홀수인 경우
continue;
}
System.out.println(i); // 홀수는 실행되지 않음
}
}
}
// 실행 결과
// 2
// 4
// 6
// 8
// 10
🔘 for문: for(초기화식; 조건식; 증감식) {...}을 말하며 조건식이 true가 될 때까지만 중괄호 내부를 반복하며, 반복할 때마다 증감식이 실행됨. 초기화식은 조건식과 증감식에서 사용할 루프 카운터 변수를 초기화하며, 주로 지정된 횟수만큼 반복할 때 사용.
🔘 while문: while(조건식) {...}을 말하며 조건식이 true가 될 때까지만 중괄호 내부를 반복 실행.
🔘 do-while문: do {...} while(조건식);을 말하며 먼저 do 중괄호 내부를 실행하고 그다음 조건식이 true가 되면 다시 중괄호 내부를 반복 실행.
🔘 break문: for문, while문, do-while문 내부에서 실행되면 반복을 취소.
🔘 continue문: for문, while문, do-while문 내부에서 실행되면 증감식 또는 조건식으로 돌아감.
'Java' 카테고리의 다른 글
| [Java] 배열 (0) | 2025.11.04 |
|---|---|
| [Java] 참조 타입과 참조 변수 (0) | 2025.11.03 |
| [Java] 조건문: if문, switch문 (0) | 2025.11.02 |
| [Java] 연산자의 종류 - 이항 연산자 & 삼항 연산자 (0) | 2025.11.02 |
| [Java] 연산자의 종류 - 단항 연산자 (0) | 2025.11.02 |