주어진 조건을 만족하는 동안, 반복적인 작업을 수행하도록 함.
종류에는 for
문, while
문, do
-while
문이 있음.
while
문과 기능이 유사하지만, 주로 반복횟수를 알고 있을 때 사용하기 적합함.
for (초기화; 조건식; 증감식) {
// 조건식이 true일 때 수행할 코드
}
초기화, 조건식, 증감식은 모두 생략해도 됨. 이 경우에는 조건식이 항상 true
인 것으로 간주되어 블럭{}
안의 코드들이 무한히 반복 수행되는 무한 루프가 됨.
for (;;) {
// 수행할 코드 (break 하지 않는 한, 무한 반복됨)
}
초기화 (최초 1회) → 조건식 평가 → 조건식이 true
일때 수행할 코드 → 증감식 → 조건식 평가 → ... (반복)
조건식이 false
가 되는 순간 for
문을 빠져나옴.
초기화할 때, 타입 지정을 빼먹지 않도록 주의
일반적으로는 1가지만 사용하지만, 2가지 이상의 변수가 필요하면
,
로 구분. (단, 모든 변수의 타입은 같아야함)
for (int i = 0; i < 10; i++) {
System.out.printf("%d번째 출력입니다%n", i + 1);
}
for
문 안에 또 다른 for
문을 넣는 것도 가능함.
for (int i = 2; i < 10; i++) {
for (int j = 1; j < 10; j++) {
System.out.printf("%d * %d = %d%n", i, j, i * j);
}
}
배열과 컬렉션의 요소에 접근할 때 기존 for
문 보다 편리하게 접근 가능하게 해주는 문법 (JDK 1.5부터 지원됨)
for (타입 변수명 : 배열 또는 컬렉션) {
// 반복 수행할 코드
}
📌 [주의] 변수명의 타입은 배열(또는 컬렉션)의 요소의 타입과 같아야함.
1부터 5까지의 숫자가 담긴 배열 arr
의 모든 원소를 한번씩 출력한다고 하면,
int[] arr = {1, 2, 3, 4, 5};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
위의 기존 for
문 방식을 enhanced 버전으로 만들어보면,
for (int el: arr) {
System.out.println(el);
}
이렇게 훨씬 간결하게 iteration 을 표현할 수 있음.
조건식과 블럭{}
으로만 이루어져 있어 for
문에 비해 구조가 단순함. 조건식은 생략할 수 없음.
while (조건식) {
// 조건식이 true인 동안 수행할 코드
}
1부터 10까지 출력하는 for
문은 다음과 같음.
for (int i = 0; i < 10; i++) {
System.out.println(i + 1)
}
이를 while
문으로 표현하면,
int i = 0; // 초기화
while (i < 10) {
System.out.println(i + 1)
}
while
문도 조건식이 항상 true
이게 만들면 무한 루프가 가능함.
while (true) {
// 수행할 코드 (break 하지 않는 한, 무한 반복됨)
}
while
문을 변형시켜 조건식을 뒤쪽으로 보내고 블럭{}
을 do
키워드와 함께 앞에 위치시킴.
do {
// 수행할 코드 (최초 1회는 무조건 실행됨. 그 이후는 조건식의 평가 결과가 true면 반복)
} while (조건식)
자신이 포함되어있는 가장 가까운 반복문 하나로부터 벗어나게 해줌.
보통은 무한 루프인 반복문을 제어하기 위해 사용함.
예시)
while (조건식) {
// 조건식이 true일 때 수행할 코드
if (조건식2) {
// 조건식2가 true일 때 수행할 코드
break; // 반복문 탈출
}
}
반복이 진행되는 도중 continue
를 만나면 반복문의 시작 위치로 이동함.
for
문: 증감식으로 이동
while
문과 do
-while
문: 조건식으로 이동
break
는 조건문인switch
문 안에서도 쓰였던 반면,continue
문은 반복문 안에서만 쓸 수 있음.
예시)
for (초기화; 조건식; 증감식) {
// 조건식이 true일 때 수행할 코드
if (조건식2) {
continue; // 조건식2가 true이면 for문 내부를 끝까지 돌지 않고 다시 증감식으로 이동함.
}
// 조건식2가 false일 때 수행할 코드 (위쪽에서 continue를 만났다면 실행되지 않음)
}
반복문에 이름을 정해놓고 break
문이나 continue
문을 사용할 때 이름을 호출해주면 중첩된 반복문을 효율적으로 제어할 수 있음.
예시)
반복문 이름: for (초기화; 조건식; 증감식) {
for (초기화2; 조건식2; 증감식2) {
if (조건식3) {
break 반복문 이름; // 가장 바깥쪽 반복문의 이름을 지정했으므로 전체 반복문 즉시 탈출.
}
}
}