본문 바로가기

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

[Java] 05.03 - for, while 그리고 do ~ while

들어가며

 앞서 소개한 컨트롤 문장들은
조건에 따른 코드의

 '선택적 실행'을 위한 것들이다.

 그러나 지금부터 소개하는
컨트롤 문장들은

 조건에 따른 코드의 '반복
적 실행'을 위한 것들이다.

 

반복문 - while

 while문의 동작 방식을
이해하는 것은

 if문을 이해하는 것만큼이나
쉽다.

 따라서 간단한 예제와
그 실행 결과를 통해서

 관찰할 수 있는 기회를
먼저 제공하겠다.

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

        while (num < 5){
            System.out.print(num + " ");
            num++;
        }
    }
}
/*
실행 결과
0 1 2 3 4 
*/

 실행 결과를 관찰해보면
while문 안에 위치한

 두 문장이 총 5회 실행되었음을
알 수 있다.

그림 42 - while문의 구조

 위 그림에서 보이듯이

 while문의 소괄호에는
반복의 조건을 명시한다.

 true 또는 false가 와야 하므로
이를 반환하는 연산이 오게 된다.

 그리고 그 조건이 true를
반환하는 동안에는

 횟수에 상관없이 while문의
중괄호가 반복 실행되는데,

 다음의 패턴으로 반복이 된다.

  • 선(先) - 조건 검사
  • 후(後) - 조건의 결과가 true일 때, 중괄호 영역 실행

 이렇듯 조건 검사가 먼저
진행되기 때문에

 처음부터 false가 반환되면

 while문의 중괄호는 한 번도
실행되지 않을 수도 있다.

 반면에 조건 검사가 계속해서
true만 반환하도록 구성된다면,

 예를 들어서 앞서 보인 예제에서
7행이 생략된 경우라면

 while문을 벗어나지 못 하는
문제가 발생할 수 있으니,

 이러한 부분에 주의해야 한다.

 그리고 while문의 중괄호도
반복실행할 문장이 하나라면

 생략이 가능하다.

 이는 이어서 소개하는 do ~ while
문과 for문에서도 마찬가지다.

 

반복문 - do ~ while

 while문은 다음의 패턴으로
반복을 진행함을 알았다.

 

  • 선(先) - 조건 검사
  • 후(後) - 조건의 결과가 true일 때, 중괄호 영역 실행

 반면에 이번에 소개하는
do ~ while문은

 다음의 패턴으로 반복을
진행한다.

  • 선(先) - 중괄호 영역 실행
  • 후(後) - 조건의 결과가 true일 때, 반복 결정

 즉 이 둘의 유일한 차이점은

 반복 조건을 검사하는 시점에
있다.

 while문은 '선 검사' 방식이고,
do ~ while문은 '후 검사' 방식이다.

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

        do {
            System.out.print(num + " ");
            num++;
        }while (num < 5);
    }
}
/*
실행 결과
0 1 2 3 4 
*/

 

그림 43 - do ~ while문의 구조

 예제에서 보였듯이,

 while문으로 작성된 문장은
do ~ while문으로도
작성이 가능하고

 또 그 반대도 가능한 경우가
대부분이다.

 따라서 가음의 경우에 한해
do ~ while문을 사용하고,

조건에 따른 반복이 필요하다.
그런데 반드시 한 번은 실행이 되어야 한다.

 이외의 경우에는 while문 또는

 이어서 소개하는 for문을
사용하는 것이 바람직하다.

 그래야 선택하는 반복문에
더 많은 의미를 부여할 수 있다.

 

반복문 - for

 while문을 이용해서
"나는 빡빡이다."를

 총 3회 출력하기 위해서는

 다음 형태로 문장을
작성해야 한다.

int num = 0;
while (num < 5){
    System.out.println("나는 빡빡이다.");
    num++;
}

 그런데 이처럼 '반복의
횟수가 정해져 있는 상황'
에서는

 for문을 이용해서 다음과
같이 작성하는 것이

 더 간결하고 뜻도 더 잘
통한다.

for (int num = 0; num < 3; num++){
    System.out.println("나는 빡빡이다.");
}
// 반복의 대상이 한 문장이므로 중괄호는 생략이 가능하다.

 이렇듯 '정해진 횟수의 반복'을
위해 사용하는 것이 for문이다.

 이 for문을 while문과 비교하면
다음과 같다.

 이 비교를 통해서 for문을
쉽게 이해할 수 있다.

그림 44 - while문과 for문의 비교

 위 그림에서 while문과
for문의 ①, ②, ③이
갖는 의미는

 둘 다 다음과 같다.


반복의 횟수를 세기 위한 변수


반복의 조건


반복의 조건을 무너뜨리기 위한 연산

 위 그림을 보면 for문은
while문과 달리

 반복에 필요한 모든 것을
한 줄에 나열할 수 있음을
알 수 있다.

 그리고 이것이 for문의
장점이다.

 그럼 예제를 통해서 for문의
실행을 확인해보자.

public class temp {
    public static void main(String[] args){
        for (int num = 0; num < 3; num++){
           System.out.println("나는 빡빡이다.");
        }
    }
}
/*
실행 결과
0 1 2 3 4
*/

 [그림 44]의 내용을 바탕으로
위의 예제를 관찰하면

 for문의 실행 흐름을 어느 정도
파악할 수 있다.

 더불어 실행 흐름의 파악을
돕기 위해

 다음 그림을 추가로 제시한다.

그림 45 - for문의 실행 흐름

 위 그림에서 보인 for문에
처음 진입해서

 첫 번째 실행이(첫 번째 루프가)
완료되기가지의 과정을 정리하면

 다음과 같다.

  1. 변수의 선언 및 초기화
  2. 반복 조건이 true인지 확인
  3. 반복 영역을 실행 (반복 조건이 true이면)
  4. 변수의 값 변경

 위의 순서에서 3과 4를
바꿔서 생각하지 않도록
주의해야 한다.

 그리고 2번째 이후의 실행
과정은

 '변수의 선언 및 초기화'만
생략하면 동일하다.

 즉 이후로는 다음 과정을
반복할 뿐이다.

  1. (생략)
  2. 반복 조건이 true인지 확인
  3. 반복 영역을 실행 (반복 조건이 true이면)
  4. 변수의 값 변경

 그러다 반복 조건이 false가
되면,

 for문을 빠져나오면서 반복은
종료가 된다.


참고 및 출처

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