본문 바로가기

Java/Chapter 05. 실행 흐름의 컨트롤

[Java] 05.04 - break & continue

들어가며

 break와 continue는 실행
흐름의 조절을 목적으로

 반복문 내에 삽입되는
키워드이다.

 따라서 이 둘을 적절히
활용하면

 다양한 흐름을 보이는
반복문을 구성할 수 있다.

 

break문

 break문은 앞서 switch문을
빠져나가는 용도로

 소개한 바 있는데,

 마찬가지로 반복문을 빠져나가는
용도로 사용된다.

 보통은 if문ㅇ과 함께 사용되어
특정 조건이 만족 될 때,

 이를 감싸는 반복문을 빠져
나가도록 구성이 된다.

 이와 관련하여 다음 예제를
보자.

public class temp {
    public static void main(String[] args){
        int num = 1;
        boolean search = false;

        while (num < 100){
            if (((num % 5) == 0) && ((num % 7) == 0)){
                search = true;
                break;
            }
            num++;
        }

        if (search){
            System.out.println("찾는 정수: " + num);
        }
        else{
            System.out.println("404 NOT FOUND");
        }
    }
}
/*
실행 결과
찾는 정수: 35
*/

 위 예제에서 보이듯이
break문이 실행되면,

 이를 감싸고 있는 반복문
하나를 빠져나가게 된다.

"저자 양반, break문 감싸고
있는 건 if문인뎁쇼"

 물론 breal문을 가장 가까이서
감싸고 있는 것은 if문이다.

 그러나 break문이 실행되면
가장 근접한 거리에서

 자신을 감싸고 있는 반복문을
찾아서 해당 반복문을 탈출한다.

 그리고 이러서 그 다음 문장을
실행하게 된다.

 

continue문

 이번에 서개할 continue문은
break문과 혼동하기 쉽다.

 그러니 주의가 필요하다.

 우선 continue문은 반복문의
탈출과 거리가 멀다.

 continue문은 실행하던
반복문의 나머지 부분을
생략하고

 프로그램의 흐름을 조건
검사 부분으로 이동시킨다.

 즉, 이 둘의 차이점은
다음과 같다.

그림 46 - break문과 continue문의 비교

 위 그림에서 보여주듯이
continue문을 만나면,

 반복문의 나머지 부분을
실행하지 않고

 반복문의 맨 위로 이동을
하여

 조건 검사부터 실행을
이어나간다.

 이때 do ~while문의 경우에는
조건 검사를 위해 맨 아래로
이동한다.

 예제를 하나 제시할 테니,

 위 그림과 더불어 참조하여
continue문을 완벽히 이해하자.

 이 예제는 100이하의 자연수
중에서

 5와 7의 공배수인 정수를
모두 출력하고,

 그 수를 세어서 출력하는
프로그램이다.

 참고로 이 예제는 continue문이
활용되는 전형적인 모델을
보여준다.

public class temp {
    public static void main(String[] args){
        int num = 0;
        int count = 0;

        while ((num++) < 100){
            if (((num % 5) != 0) || ((num % 7) != 0))
                continue;
            count++;
            System.out.println(num);
        }
        System.out.println("count: " + count);
    }
}
/*
실행 결과
35
70
count: 2
*/

 

무한 루프와 break

 반복의 조건이 true로 명시되어서

 해당 반복문을 빠져나가지
못하도록 구성된 반복문을

 '무한 루프'라고 한다.

 즉 다음 while문은 무한 루프이다.

while (true) {
    . . .
}

 다음과 같이 do ~ while문을
이용해서 무한 루프를 구성할
수도 있다.

do {
    . . .
} while (true);

 유사하게 for문도 반복의
조건을 명시하는 중간 부분에

 true를 삽입하면 무한 루프가
형성된다.

 그러나 다음과 같이 이 부분을
그냥 비워도 무한 루프가 형성된다.

for ( ; ; ) {
    . . .
}

 그렇다면 이러한 무한 루프는
언제 사용할 수 있을까?

 물론 그 자체만 가지고는
특별히 의미를 부여하기
힘들다.

 그러나 다음 예제에서
보이는 바와 같이

 break문과 결합하면

 유용하게 사용할 수 있는
모델이 된다.

public class temp {
    public static void main(String[] args){
        int num = 1;

        while (true) {
            if(((num % 6) == 0) && ((num % 14) == 0))
                break;
            num++;
        }
        System.out.println(num);
    }
}
/*
실행 결과
42
*/

 위 예제는 '6과 14의 최소공배수'를
찾는 예제이다.

 그리고 이 자연수를 찾기
위한 '값의 범위'를

 제한하지 않기 위해서
무한 루프를 형성하였다.

 다시 말해서 위 예제의
무한 루프에는

 다음의 의미가 담겨 있다.

6과 14의 공배수를 찾을 때까지
계속해서 반복을 진행하겠다.


참고 및 출처

윤성우의 열혈 Java 프로그래밍
국내도서
저자 : 윤성우
출판 : 오렌지미디어 2017.07.05
상세보기