4.2.1 break 제어 키워드

jh·2022년 1월 22일
1

Do it! 자바 완전 정복

목록 보기
29/70

break는 'if 문을 제외한 가장 가까운 중괄호를 탈출'하는 제어 키워드다. 이미 switch 문에서 살펴본 적이 있는데, 그때는 switch문을 탈출하기 위한 용도로 사용했다. 일반적으로 break는 반복문에서 특정 조건을 만족할 때 반복문을 탈출하는 데 사용한다. 다음 예를 살펴 보자.

💡 반복문 안에 break만 단독으로 사용된 예

for(int i = 0; i < 10; i++) {
System.out.println(i); // i = 0일 때 한 번만 출력 
break; // 반복문 탈출 실행 
} // ifans 제외하고 가장 가까운 중괄호 탈출 

10회 반복을 수행하는 for 문 내부에 break가 포함돼 있다. 반복문이 실행되는 과정에서 break를 만나면 if문을 제외하고 가장 가까운 중괄호를 탈출하라는 의미이므로 for 문을 탈출할 것이다. 즉, for 문의 반복 횟수와 상관 없이 단 하나의 출력만 실행되고 for 문이 종료될 것이다.
그런데 한 번만 값을 출력하고 싶다면 굳이 for 문을 쓸 필요가 없다. 그래서 break 키워드만 사용되는 때는 거의 없으며 일반적으로 다음 예제와 같이 if문과 함께 사용해 특정 조건이 만족될 때 반복문을 탈출하도록 구성하는 것이 일반적이다.

💡반복문 안에 if 문과 함께 break가 사용된 예

for(int i = 0; i < 10; i++) {
if(i == 5) { //if문으로 break 키워드를 실행할 조건 설정 
break;
} 
System.out.println(i); // i = 0, 1, 2, 3, 4일 때 출력
} //break로 탈출하는 중괄호

여기서 꼭 기억해야 하는 점은 break를 이용해 탈출하는 것은 if 문을 제외한 가장 가까운 중괄호 하나라는 것이다. 따라서 이중으로 중복된 for 문 내에서 break를 사용할 때 안쪽 for 문만 탈출하게 된다. 다음 예를 살펴보자

💡 이중 for 문 내에서 break를 이용한 반복문의 탈출

        for (int i = 0; i < 10; i++) { // 바깥쪽 for 문
            for (int j = 0; j < 10; j++) { // 안쪽 for 문
                if (j == 3) 
                    break;
                System.out.println(i + " " + j);
            }  // break로 탈출하는 중괄호
        }
        
결과 0,0 0,1 0,2 1,0 1,1 ... 9,2

j 값이 3이 돼 break를 만나면 탈출하는 반복문은 안쪽의 for 문이다. 탈출 이후에도 바깥쪽 for 문 내부에 있으므로 i 값의 변화에 따른 반복은 여전히 유효하다. 즉, 이때 i = 0, 1, 2, ... 9 그리고 j = 0, 1, 2일 때 출력이 이뤄져 모두 30회의 출력을 실행할 것이다.
위 예제에서 j = 3일 때 바깥쪽 for 문까지 탈출하려면 어떻게 해야할까? 정말 간단한 아이디어만으로도 바깥쪽 for문까지 탈출할 수 있는데, 그 방법은 다음과 같이 break를 수행하기 전에 바깥쪽 조건식이 false가 되도록 i 값을 큰 값으로 바꿔놓는 것이다.

💡 변숫값을 조정해 이중 for 문 한 번에 탈출하기

        for(int i = 0; i < 10; i++) { // ③ i 값이 조건식을 만족하지 않아 바깥쪽 for 문 종료
            for(int j = 0; j < 10; j++) {
                if(j == 3){
                    i = 100; // ① 브레이크를 실행하기 전 i 값 변경
                    break;
                }
            System.out.println(i + ", " + j); 
            } //② 안쪽의 for 문 중괄호 탈출
        }

결과 0,0 0,1 0,2 

이렇게 되면 break로 탈출하는 중괄호는 동일하지만 이후 i값을 사용한 조건식에서 fasle가 나와 결국 이중 for문을 모두 탈출하게 된다. 따라서 단 3회만 출력을 실해한다.
break로 다중 반복문을 한 번에 탈출하는 자바의 공식적인 방법은 break + Label(레이블) 문법이다. break 다음에 레이블을 지정하면 한 번에 여러개의 다중 반복문을 탈출할 수 있다. 레이블명은 개발자가 임의로 지을 수 있으며 레이블 다음에는 반드시 콜론 : 을 표시해야 한다.

💡 레이블을 이용해 이중 for 문 한 번에 탈출하기

        out: // 레이블 위치 지정(break하고자 하는 반복문 앞에 레이블 표기)
        for (int i = 0; i < 10; i++)     {
            for ( int j = 0; j < 10; j++) {
                if (j == 3)
                    break out; //out 레이블이 달린 반복문 탈출 
                System.out.println(i + ", " + j);
            }
        } // break out으로 탈출하는 중괄호

여기서 break out은 out레이블이 위치해 있는 바깥쪽 for 문을 탈출하라는 의미이므로 3회의 출력(0,0 0,1 0,2)만 실행된다.

실습

        // 단일 반복문 탈출
        for(int i = 0; i < 10; i++) {
            System.out.println(i);
            break;
        }

        for(int i = 0; i < 10; i++) {
            if(i == 5) {
                break;
            }
            System.out.println(i + " ");
        }
        System.out.println();
        System.out.println();

        //다중 반복문 탈출
        //@1개의 반복문만 탈출할 때
        for(int i = 0; i < 5; i++) {
            for(int j = 0; j < 5; j++) {
                if(j == 2) {
                    break;
                }
                System.out.println(i + ", " + j);
            }
        }
        System.out.println();

        // @ break + Label 문으로 다중 반복문 탈출
        POS1 : for(int i = 0; i < 5; i++){
            for(int j = 0; j < 5; j++) {
                if(j == 2) {
                    break POS1;
                }
                System.out.println(i + ", " + j);
            }

        }
        System.out.println();

        // @변숫값을 조정해 다중 반복문 탈출
        for(int i = 0; i < 5; i++){
            for(int j = 0; j < 5; j++){
                if(j == 2){
                    i = 100;
                    break;
                }
                System.out.println(i + ", " + j);
            }
        }
        System.out.println();

결과

profile
코딩 공부 중...

0개의 댓글