사람들은 여러 가지 반복적인 작업을 했을 때 실수하고 지루해 하기에 이러한 것을 시스템에 대행하여 만든 것이 기계이고, 컴퓨터가 그러한 반복적인 작업을 사람 대신 수행할 수 있는 수단을 반복문이라고 합니다. 영어로는 루프(loop) 혹은 이터레이션(iteration)이라고도 합니다. 둘 다 반복문, 반복적인 작업을 뜻하는 것으로 생각하면 됩니다.
for문과 while문은 서로 변환이 가능하기 때문에 반복문을 작성할 때 어느 쪽을 선택해도 좋지만 for문은 반복 횟수를 알고 있을 때 주로 사용하고, while문은 조건에 따라 반복할 때 주로 사용합니다.
while문과 do-while문의 차이점은 조건을 먼저 검사하느냐 나중에 검사하느냐일뿐 동작 방식은 동일합니다.
반복문의 종류는 다음과 같습니다.
- for문
- while문
- do-while문
for문
프로그램을 작성하다 보면 똑같은 실행문을 반복적으로 실행해야 할 경우가 많이 발생합니다.
for문은 식 안에 자체적으로 초기식, 조건식, 증감식을 모두 포함하고 있는 반복문으로 주어진 횟수만큼 실행문을 반복 실행할 때 적합한 반복 제어문입니다.
- for문이 처음 실행될때 초기식(①)이 가장 먼저 실행됩니다.
- 조건식(②)을 평가해서 true이면 for문 블록 내부의 실행문(③)을 실행하고, false이면 for문 블록을 실행하지 않고 종료합니다.
- 블록 내부의 실행문(③)들이 모두 실행되면 증감식(④)→조건식(②)으로 다시 진행하고 false이면 for문이 종료됩니다.
초기식은 조건식과 실행문, 증감식에서 사용할 변수를 초기화하는 역할을 합니다.
초기 식이 필요 없을 경우에는 다음과 같이 초기식을 생략할 수 있습니다.
int i = 10;
for(; i<=100; i++) { //초기식 자리를 비워두고
.....
}
|
cs |
어떤 경우에는 초기화식이 둘 이상 있을 수 있고, 증감식 역시 둘 이상 있을 수 있습니다.
이런 경우에는 다음과 같이 쉼표로 구분해서 작성합니다.
for(int i=0, j=100; i<=50 && j<=100; i++, j--) {
.....
}
|
cs |
초기화식에 선언된 변수는 for문 블록 내부에서 사용되는 로컬 변수입니다.
따라서 for문을 벗어나서는 사용할 수 없습니다.
<for문 예제>
다음은 가장 기본적인 for문의 형태로 "for문 익히기"를 5번 출력하는 간단한 예제입니다.
int i;
for (i = 0; i < 5; i++) {
System.out.println("for문 익히기");
}
}
}
|
cs |
<실행 결과>
해당 예제가 동작하는 흐름은 다음과 같습니다.
- int i 변수 선언
- for문 형식( 초기식; 조건식; 증감식 ) { 반복할 조건 }
- int i 변수를 이용하여 초기값 설정 ( i=0 )
- 조건식 ( i <5 ) 즉, i가 5번 반복되는 반복문이 실행
중첩 for문
for문은 또 다른 for문을 내포할 수 있는데 이것을 중첩 for문이라고 합니다.
이 경우 바깥쪽 for문이 한번 실행할 때마다 중첩된 for문은 지정된 횟수만큼 반복해서 돌다가 다시 바깥쪽 for문으로 돌아갑니다.
다음 예제는 구구단을 출력하는 코드입니다.
for (int m = 2; m <= 9; m++) {
System.out.println("***" + m + "단***");
for (int n = 1; n <= 9; n++) {
System.out.println(m + "X" + n + "=" + (m * n));
}
}
}
}
|
cs |
가장 처음 for문은 m이 2에서 9까지 변하면서 8번 반복 실행되는데, 바깥쪽 for문이 한번 실행할 때마다 두 번째 중첩 for문은 n이 1에서 9까지 변하면서 9번 반복 실행합니다.
즉 m=2일때 n은 1~9까지 변하면서 2xn=2*n을 출력하는 것입니다.
while문
for문이 정해진 횟수만큼 반복한다면 while문은 조건식이 true일 경우 계속해서 반복합니다.
while문의 조건식에는 비교 또는 논리 연산 식이 주로 오며 조건식이 false가 되면 반복 행위를 멈추고 while문을 종료합니다.
while문 내부에 조건식의 결과를 변경하는 명령문이 존재하지 않을 때는 프로그램이 영원이 반복되게 되며 이것을 무한루프에 빠졌다고 표현합니다.
무한루프를 방지하기 위해서는 조건식의 결과가 어느순간 false를 갖도록 변경하는 명령문을 반드시 포함시켜야 합니다.
- while문이 처음 실행될때 조건식(②)을 평가합니다.
- 평과 결과가 true이면 실행문(③)을 실행합니다.
- 실행문(③)이 모두 실행되면 조건식으로 되돌아가서 다시 조건식(②)을 평가합니다.
- 만약 조건식이 true라면 실행문(③)→조건식(②)으로 다시 진행합니다.
- 만약 조건식이 false라면 while문을 종료합니다.
위와 같이 while문은 소괄호에 오는 조건이 true인 동안 중괄호 블록에 들어있는 작업을 반복 실행하는 문법적 구조를 가지고 있습니다.
<while문 예제>
"안녕"을 4번 실행하는 프로그램을 구현하겠습니다.
int count = 0;
while (count < 4) {
System.out.println("안녕");
count++;
}
}
}
|
cs |
코드를 보면 처음에 count라는 변수를 선언해 값을 0으로 지정했는데 이를 초기화 또는 초기화 값이라고 표현합니다.
이어서 while 문이 등장하여 조건식에 count와 4라는 숫자를 비교하고 있습니다.
비교 연산자의 결과는 언제나 참 아니면 거짓입니다.
그래서 결과적으로 count <4라는 값은 참이나 거짓이 되자만 count라는 변수의 값이 어떻게 되느냐에 따라 조건이 참이 될 수도, 거짓이 될수도 있습니다.
count++라는 구문은 count+1의 형태의 연산과 같은 역할을 합니다.
따라서 현재 count의 값이 0이므로 0에 1을 더해서 1이 됩니다.
이를 다시 count에 넣었기 때문에 count의 값은 count++ 구문이 실행되면서 0에서 1이 됩니다.
그다음에 다시 반복 조건 count <4를 검사합니다.
현재 count의 값은 1입니다. 1은 4보다 작으므로 다시 count <4는 다시 참이 됩니다.
이런 식으로 반복되면서 count의 값이 3이 됐을 때 count <4이 참이 되므로 마지막 안녕이 출력됩니다.
<실행 결과>
do-while문
do-while문은 조건식에 의해 반복 실행된다는 점에서는 while문과 동일합니다.
차이점이라면 while문은 시작할 때부터 조건식을 검사하여 블록 내부를 실행할지 말지 결정하지만, do-while문은 루프를 먼저 한번 실행한 후에 조건식을 검사한다는 것입니다.
즉 do-while문은 조건식의 결과와 상관없이 무조건 한 번은 루프를 실행합니다.
- do-while문이 처음 실행될 때 실행문(③)을 우선 실행합니다.
- 실행문(③)이 모두 실행되면 조건식(④)을 평가합니다.
- 조건식의 결과가 true이면 실행문(③)→조건식(④)과 같이 반복 실행을 합니다.
- 조건식의 결과가 false이면 do-while문을 종료합니다.
do-while문 작성 시 while() 뒤에 반드시 세미콜론을 붙여야 정상 동작합니다.
<do-while문 예제>
1부터 10까지의 합이 출력되도록 구현하겠습니다
int sum = 0;
int count = 1;
do {
sum += count;
count++;
} while (count <= 10);
System.out.println(sum);
}
}
|
cs |
<실행 결과>
'개발자였던 것 > JAVA 기초' 카테고리의 다른 글
조건문 (0) | 2020.03.07 |
---|---|
문자의 입력과 출력-Scanner (0) | 2020.03.06 |
순서도 (0) | 2020.03.03 |
연산자 (산술/대입/증감/비교/논리/비트/삼항) (0) | 2020.03.03 |
자바의 자료형 정리 (상수/변수/자료형) (2) | 2020.03.02 |