Language/Java

Java while문 그리고 do, continue, break

SambaLim 2019. 6. 8. 23:37

for문을 사용하는 사람이라면 굳이 while문을 사용할 필요가 없다. (대학교졸업까지 코드를 짤 때, 단 한번도 while을 사용해보지 않았었다.)

하지만 while 문이 for문보다 코드를 간결하게 해주는 경우가 있다. (ex. 초기화가 필요하지 않은 경우, 증감식이 필요하지 않은 경우) 이는 아래의 for vs while에서 다뤄보고자 한다.

while문

while(조건식) {
    // 조건식의 결과가 true인 경우, 반복될 문장을 적는다.
}

while문은 우선 조건식이 true인지 false인지 판별한 후에 조건식이 true라면 {}내의 문장을 이행하고, 다시 조건식을 판별한다. false일 경우에는 루프 밖으로(문장 밖으로) 벗어난다.

for vs while

for문과 while문은 항상 서로 변환이 가능하다.

이 둘을 비교하기 위해 우선 코드를 본다면, 다음과 같다.

// for문
for(int i=0; i<10; i++) {
    System.out.println(i);
}

// while문
int i = 0;
while(i<10) {
    System.out.println(i);
    i++;
}

값을 초기화 하고, 조건식, 증감식이 한 곳에 뭉쳐있는 것이 보기 좋은 경우 for문이 유리하다.

do-while문

do-while문은 while문의 변형으로 while문의 조건식과 블럭의 순서가 바뀌어져있다.

따라서 먼저 do의 반복문을 실행하고 while의 조건식이 true인지 false인지 판별한다.

do {
    // 반복문
} while(조건식);

break문

while문에서 break는 자신이 포함된 가장 가까운 반복문을 벗어난다.

따라서 if문과 주로 같이 쓰이곤 한다.

int i = 0;
int sum = 0;

while(true) {
    if(sum > 100) {
        // 만약 break가 된다면, 그 이후의 부분은 실행되지 않음.
        break;
    }
    i++;
    sum += i;
}

continue문

continue문은 반복문 내에서만 사용 가능하며, 반복문이 진행되는 도중에 continue를 만날 경우, 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.

for(int i=0; i<10; i++) {
    if(i%3==0) {
        continue;
    }
    System.out.println(i);
}

// 결과
// 1 2 4 5 7 8

이름이 붙은 반복문

break문과 continue문에 이름을 지정해주어 하나 이상의 반복문을 벗어나거나 반복을 건너뛸 때, 사용한다.

일반적으로 break문과 continue문은 자신이 포함된 최소의 반복문의 끝으로 이동하지만, 이름을 지정한다면 더 큰 반복문을 벗어날 수 있다.

Loop1:
for(int i=2; i<10; i++) {
    for(int j=1; j<10; j++) {
        if(j==5) {
            break Loop1;
        }
        System.out.println(i + " x " + j + " = " + i*j);
    }
}

// 결과
// 2 x 1 = 2
// 2 x 2 = 4
// 2 x 3 = 6
// 2 x 4 = 8

위 예제에서 break Loop1을 하여 for(int i=2; i<10; i++)반복문을 벗어날 수 있었다.