본문 바로가기

개발자 이야기/JAVA

자바 반복문에 대해 알아보자 2편, while문

어제는 반복문 중에 가장 기본적인 for문에 대해서 정리해봤는데, 오늘은 이어서 반복문의 다른 종류인 while문과 do-while문을 정리하려고 한다. 사실 for문으로 대부눈 코딩을 해서 while문을 쓸 기회가 많지 않았다. 그래도 쓰일 때가 있어 알고 있으면 좋으니 while문을 그래도 간단하게라도 정리하려고 한다. 그리고 이번 포스팅에서 같이 정리할 do-while문은 정말로 쓸일이 많지 않은데 그래도 같이 정리하기로 한다.


▶ while문


위에서 간략하게 얘기한 것처럼, while문 또한 for문과 같이 반복문의 한 종류이다. 내가 while문을 쓰는 건 예전에 혼자 코딩할 때 무한 루프를 돌리기 위해서 써봤던 기억 밖에 없다. while(true) 같은 형식으로 말이다. 우선 while문의 기본형식을 살펴보면,



for문에 비해서 조건식은 간단하다. for문은 변수를 초기화하고(혹은 선언을 하기도 한다.) 조건식을 써주고, 그 다음에 증감식을 써주는데, while문은 조건식만 우선 적어주면 된다. 다만 반복문의 대상이 될 변수는 이전에 선언해서 초기화를 해놓고 조건식에 적어준다. 증감식은 while문 내부에 적어주면 된다. 같은 내용을 for문과 while문을 이용해서 각각 코딩해보았다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package test;
 
public class test {
    public static void main(String[] args) {
        for(int i=0; i<5; i++){
            System.out.println("Hello World!");
        }
        System.out.println("====================");
         
        int i = 0;
        while(i<5){
            System.out.println("Hello World!");
            i++;
        }
    }
}
/*
출력값
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
============
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
cs


"Hello World!"를 5번 출력하는 코드이다. for문과 while문을 각각 사용해서 출력해보았다. 형식은 약간의 차이가 있지만 결과 값은 동일하다. 원리도 동일하다. 본인이 편한 방식을 사용하면 되겠지만, 나는 for문을 많이 사용하고 주변에서도 for문을 많이 이용하는 것 같다. 다만 주의해야 할 점은 증감식을 빼먹지 말아야한다는 것이다. for문은 처음 조건식 안에 증감식이 들어가지만, while문은 그렇지 않기 때문에 만약 증감식을 빼먹는다면 무한루프에 빠질 수 있다. 그러니 꼭 주의해야 한다. 



▶ do-while문


while문 이어서 다음으로 살펴볼 반복문은 바로 do-while문이다. 이름처럼 while문과 비슷하다. 하지만 좀 다르기 때문에 형식부터 살펴보자.



do-while문은 for문이나 while문에 비해서 다른점이 있다. 바로 조건식이 뒤에 들어간다는 것이다. 이 말은 적어도 한번을 실행한다는 뜻이다. 조건을 나중에 체크하기 때문이다. 이러한 특성을 이용해서 do-while문을 좀 더 효율적으로 사용할 수도 있을 것이다. 그 외에 다른 점도 있다. 바로 조건식 뒤에 세미콜론(;)이 붙는다는 것이다. 이것도 빼먹는 경우가 많으니 꼭 주의해야 한다. 



▶ break문


다음으로 살펴볼 것은 바로 break문이다. break문은 반복문의 종류는 아니다. 하지만 반복문과 같이 쓰일 수 있다. 앞선 조건문 포스팅에서 switch문에서 case를 빠져나갈 때 사용했는데, 반복문에서도 비슷한 의미이다. 바로 반복문을 빠져나가는 기능이다. 반복문에서 쓰이는 예를 살펴보면,


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package test;
 
public class test {
    public static void main(String[] args) {
        for(int i=0; i<5; i++){
            if(i == 3break;
            System.out.println(i);
        }
    }
}
 
/*
출력값
0
1
2
cs


이런식으로 쓰인다. 출력값을 보면 어떤 의미인지 알 수 있을 것이다. 반복문 자체는 0부터 4까지 돌게 되어 있다. 그래서 단순히 print문 만을 사용하면 0 1 2 3 4 가 출력되어야 한다. 하지만 중간에 보면 i가 3일 때 break문을 타게 되어 있다. 그래서 출력은 0, 1, 2까지만 된 것이다. break문으로 반복문을 빠져나갔기 때문에 i에 4나 5는 들어가지 않는다. 



▶ continue문


continue문도 종종 쓰인다. break문이랑 쓰임새는 비슷하지만, 결과는 다르다. continue문은 밑의 내용을 생략한 채 한바퀴를 돌아 조건식의 변수를 증감시킨다. 예를 살펴보자. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(int i=0; i<arr.length; i++){
    for(int j=0; j<arr.length-1; j++){ 
            if(arr[j] > arr[j+1]){
                a = arr[j];
                arr[j] = arr[j+1];
                arr[j+1= a;
            }
            else continue//더 이상 변화가 일어나지 않을 경우 출력만 생략
            for(int k=0; k<arr.length; k++){
                System.out.print(arr[k] + " ");
            }
        System.out.println();
    }
}
cs


이건 예전에 공부할 때 버블정렬을 했던 코드이다. for문 안에서 continue를 만나면 아래 있는 내용은 스킵하고 i가 증가하게 된다. for k문을 타지 않는 것이다. continue문이랑 break문을 적절하게 사용하면 된다.





이렇게 해서 반복문에 대한 정리를 마쳤다. 또 제어문(조건문 + 반복문) 정리가 끝났는데, 다음 포스팅에서는 배열에 대해서 정리하려고 한다. 점점 내용이 어려워지지만 그래도 꾸준히 공부하다보면 완벽하게 사용할 수 있을 것이다.