4.2.2 continue 제어 키워드

jh·2022년 1월 22일
0

Do it! 자바 완전 정복

목록 보기
30/70
post-custom-banner

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
profile
코딩 공부 중...
post-custom-banner

0개의 댓글