continue는 반복 제어문의 닫힌 중괄호 역할을 하는 제어 키워드다. 반복 제어문은 조건식이 true가 돼 실행 구문을 실행한 후 닫힌 중괄호를 만나면 다시 다음 반복을 위해 증감식을 수행하거나(for 문) 조건식을 검사(while 문)한다. 즉, 반복문 실행 도중 continue를 만나면 실행해야 할 코드가 남아 있더라도 마치 닫힌 중괄호를 만난 것처럼 다음 반복을 위해 증감식을 수행하거나 조건식을 검색한다는 말이다. 따라서 continue는 주로 반복 과정에서 특정 구문을 실행하지 않고 건너뛰고자 할 때 사용한다. 다음 예제를 살펴 보자.
📙반복문 안에 continue만 단독으로 사용된 예
for(int i = 0; i < 10; i++) {
continue;
// System.out.println(i); // 오류 unreachable code
} // continue가 대체하는 중괄호
10회 반복을 수행하는 for 문 내부의 첫줄에 continue가 있다. continue를 만나면 아래쪽에 실행할 코드가 남아 있더라도 마치 닫힌 중괄호를 만난 것처럼 다음 반복을 위해 증감식으로 이동하므로 위 예제에서 출력 구문은 절대 도달할 수 없는 코드가 돼 오류가 발생한다.
continue 역시 단독으로 사용될 때는 거의 없으며 if 문과 함께 사용해 특정 조건에서 실행 구문을 건너 뛰고자 할 때 사용한다.
📙반복문 안에 if문과 함께 continue가 사용된 예
for(int i = 0; i < 10; i++) {
if(i == 5) {
continue;
}
System.out.println(i); // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
} // continue가 대체하는 중괄호
i = 5일 때는 continue가 실행돼 출력 코드가 실행되지 않는다. 따라서 i = 5일 때를 제외하고 9번의 출력이 실행된다.
continue도 break와 마찬가지로 if문을 제외한 가장 가까운 중괄호의 닫힌 괄호 역할을 수행한다. 즉, 하나의 반복문에만 영향을 미칠 수 있다. 다음 예제를 살펴보자.
📙 이중 for 문 내에서 continue를 통한 실행 명령 건너뛰기
for(int i = 0; i < 5; i++) {
for(int j = 0; j < 5; j++) {
if(j == 3) {
continue;
}
System.out.println(i + ", " + j);
}
} // 0,0 0,1 0,2 0,4 ... 4,0 4,1 4,2 4,4
j = 3일 때 continue가 실행되면 출력 구문의 실행 없이 바로 증감식으로 이동해 값이 j = 4 로 변경된다. 이후에는 정상적인 이중 for문이 수행된다. 즉, 이때 바깥쪽 for 문의 i 값은 0, 1, 2, 3, 4로 총 5회 반복하고 안쪽 for문은 j = 3일 때를 제외해 j값이 0, 1, 2, 4로 총 4회 출력문을 실행한다. 즉, 위 예제는 출력문을 총 20회 실행한다.
continue도 continue + Label 문법을 사용할 수 있으며 이때 해당 레이블이 붙은 반복문의 닫힌 중괄호 역할을 수행해 한 번에 여러 개의 반복문을 건너뛸 수 있다. 다음 예제를 살펴 보자.
📙 continue Label을 이용해 이중 for 문 내에서 여러 개의 반복문을 한 번에 건너뛰기
POS1 : //레이블 위치 지정(continue 하고자 하는 반복문 앞에 레이블 표기)
for(int i = 0; i < 5; i++){
for(int j = 0; j < 5; j++) {
if(j == 3){
continue POS1; // POS1 레이블이 달린 반복문의 닫힌 중괄호 대체
}
System.out.println(i + ", " + j);
// 0,0 0,1 0,2 1,0 1,1 1,2 4,0 4,1 4,2
}
} // continue POS1로 대체하는 중괄호
바깥쪽 for 문에 POS1 레이블을 지정해 놓은 후 이중 for 문 내부에서 j = 3일 때 continue POS1이 실행되도록 했다. 이때 continue가 대체하는 중괄호는 레이블이 가리키고 있는 바깥쪽 for 문의 닫힌 중괄호 이므로 i++의 증감식으로 바로 이동할 것이다. 따라서 이때 바깥쪽 for 문은 i값이 0, 1, 2, 3, 4로 총 5회 반복하고, 안쪽 for 문은 j값이 0, 1, 2로 총 3회 반복한다. 즉 출력문을 총 15회 실행한다.
// 단일 반복문에서 continue 사용
for(int i = 0; i < 10; i++) {
continue;
//System.out.print(i + " "); // unreachable code 오류 발생
}
for(int i = 0; i < 10; i++) {
System.out.print(i + " ");
continue;
}
System.out.println();
for(int i = 0; i < 10; i++) {
if(i == 5) {
continue;
}
System.out.print(i + " ");
}
System.out.println();
// 다중 반복문에서 continue 사용
for (int i = 0; i < 5; i++) {
for(int j = 0; j < 5; j++) {
if(j == 3) {
continue;
}
System.out.println(i + ", " + j);
}
}
System.out.println();
POS1: for(int i = 0; i < 5; i++) {
for(int j = 0; j < 5; j++) {
if(j == 3) {
continue POS1;
}
System.out.println(i + ", " + j);
}
}
결과
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 6 7 8 9
0, 0
0, 1
0, 2
0, 4
1, 0
1, 1
1, 2
1, 4
2, 0
2, 1
2, 2
2, 4
3, 0
3, 1
3, 2
3, 4
4, 0
4, 1
4, 2
4, 4
0, 0
0, 1
0, 2
1, 0
1, 1
1, 2
2, 0
2, 1
2, 2
3, 0
3, 1
3, 2
4, 0
4, 1
4, 2