4.1.6 do-while 반복 제어문

jh·2022년 1월 22일
0

Do it! 자바 완전 정복

목록 보기
27/70

do-while 문은 while 문과 매우 비슷한 반복 제어문으로 조건식의 검사와 반복 실행의 순서에만 차이가 있다. 일단 do-while문의 기본 문법 구조를 살펴보자

👀do-while 문의 구성

초기식; // 필수 문법은 아니지만 일반적으로 사용
do { 
실행 구문; // 최초 1회는 무조건 실행
증감식; // 필수 문법은 아니지만 일반적으로 사용
} while(조건식); // 문법 구조상 중괄호가 없으므로 세미콜론(;)으로 끝남

다른 제어문들과 달리 조금 특이하게 생겼는데 do{...} while(조건식);의 형태로 마지막이 중괄호로 끝나지 않으므로 제어문들 중에서는 유일하게 세미콜론(;)을 붙여야 한다. 초기식과 증감식은 while문에서 설명한 것처럼 생략할 수 있지만, for 문이나 while문과의 상관관계를 잘 이해할 수 있도록 기본 문법 구조에 포함시켜 놓았다. 실행 과정을 살펴보면 일단 do 문을 실행한 이후 조건식을 검사한다. 조건식이 참이면 다시 do 문을 실행하고 거짓이면 제어문을 탈출한다. 이상의 과정을 정리하면 다음과 같다.

단계 A : 실행 구문
단계 B : 조건식(참) -> 실행 구문
...
단계 c : 조건식(거짓) -> 종료

while문은 조건식을 먼저 검사하므로 최소 반복 횟수는 0(처음부터 조건식이 false일 때)이지만, do-while문은 일단 실행한 후 조건식을 검사하므로 최소 반복 횟수가 1이다. 이외에는 while문과 동일하다. 다음 코드를 살펴보자.

👀조건식이 처음부터 false가 나올 때 do-while문과 while문의 비교

int a;
//while
a = 0;
while(a < 0) {
System.out.print(a + " "); // 0회 실행
}
System.out.println();

//do-while
a = 0;
do {
System.out.prinltn(a + " "); // 1회 실행 
a++
} while(a < 0);

초깃값 a = 0이므로 처음부터 조건식 a < 0은 false이다. 이때 while문은 중괄호 안으로 진입할 수 없으므로 한 번도 실행되지 않는다. 반면 do-while문일 때 일단 한 번 실행한 후 조건식을 검사하므로 1회는 실행된다.

여기까지만 보면 마치 do-while문은 while문보다 1회 더 실행된다고 생각할 수 있는데 절대 그렇지 않다. 이번에는 1회 이상 반복을 수행하는 예를 살펴보자. 앞의 예제에서 조건식만 a < 0에서 a < 10으로 수정했다.

👀 1회 이상 반복될 때 do-while문과 while문의 비교

int a;
///while
a = 0;
while(a < 10) {
System.out.println(a + " "); // 0, 1, 2, ..., 9 : 10회 실행 
a++;
}
System.out.println();

//do-while
a = 0;
do { 
System.out.println(a + " "); // 0, 1, 2, ... 9 : 10회 실행 
a++;
} while(a < 10);

변숫값을 하나씩 따져보면 알 수 있겠지만, 1회 이상 반복될 때 while문과 do-while 문에는 동일한 결과가 나타난다. 이를 정리하면 while문이 0번, 1번, 2번, 3번, ...을 반복할 때 이를 그대로 do-while문으로 바꾸면 1번, 1번, 2번, 3번...을 반복한다. 즉 while 문이 0번 반복할 때만 차이가 있고 1회 이상에서는 동일하다. 절대로 do-while문이 한 번 더 실행되는 것이 아니라는 점을 기억하자.

실습

        //반복 횟수가 0일 때 do-while 문과 while문 비교
        int a;
        a = 0;
        while(a < 0){
            System.out.print(a + " "); // 실행 횟수 0번
            a++;
        }
        System.out.println();

        a = 0;
        do {
            System.out.print(a + " "); // 실행 횟수 1번
            a++;
        } while (a < 0);
        System.out.println();

        //반복 횟수가 1일 때 do-while문과 while문 비교
        a = 0;
        while(a < 1) {
            System.out.print(a + " "); // 실행 횟수 1번
            a++;
        }
        System.out.println();

        a = 0;
        do {
            System.out.print(a + " ");
            a++;
        } while (a < 1);
        System.out.println();

        //반복 횟수가 10일 때 do-while문과 while문 비교
        a = 0;
        while(a < 10) {
            System.out.print(a + " "); // 실행 횟수 10번
            a++;
        }
        System.out.println();

        a = 0;
        do {
            System.out.print(a + " "); // 실행 횟수 10번
            a++;
        } while (a < 10);

결과

profile
코딩 공부 중...

0개의 댓글