이전 글 보기
2022.06.05 - [JAVA] - [Snack Java] 10. 자바의 반복문 (FOR문, 향상된 FOR문)
[Snack Java] 10. 자바의 반복문 (FOR문, 향상된 FOR문)
이전글 보기 2022.06.05 - [JAVA] - [Snack Java] 9. 자바의 조건문 (SWITCH문) [Snack Java] 9. 자바의 조건문 (SWITCH문) 이전 글 보기 2022.06.05 - [JAVA] - [Snack Java] 8. 자바의 조건문 (If문) [Snack Jav..
yunjuniverse.tistory.com
자바 반복문 중 정해진 횟수가 없는 경우 자주 사용하는 WHILE문입니다. 반복문에 대한 대략적인 설명은 FOR문에서 마쳤으니 형태를 바로 보겠습니다.
FOR문과 비슷하지만 WHILE문의 매개변수에는 조건식만 들어갑니다. 조건식이 true인 동안은 실행문을 반복하고 false인 경우는 반복문을 종료하는 거죠. 예제를 통해 살펴보겠습니다.
public class WhileExample {
public static void main(String[] args) {
int energy = 100;
while (energy > 0) {
System.out.println("생명력이 " + energy + "남았습니다.");
energy -=20;
System.out.println("생명력이 " + energy + "남았습니다.");
if (energy == 0) {
System.out.println("당신은 사망했습니다.");
}
}
}
}
/*
생명력이 100남았습니다.
생명력이 80남았습니다.
생명력이 80남았습니다.
생명력이 60남았습니다.
생명력이 60남았습니다.
생명력이 40남았습니다.
생명력이 40남았습니다.
생명력이 20남았습니다.
생명력이 20남았습니다.
생명력이 0남았습니다.
당신은 사망했습니다.
*/
게임에서 데미지를 연속적으로 입는 경우를 만들어보았습니다. 에너지가 100인 경우부터 시작하여 20씩 줄어들고 에너지가 모두 사라진 순간 사망했다는 알림이 뜨는 것이죠. 증감식과 초깃값을 따로 둔 WHILE문의 경우입니다.
그런데 WHILE문은 반복횟수가 정해져있지 않은 경우에 주로 쓴다고 했습니다. 반복횟수가 따로 정해지지 않은 경우를 살펴보죠.
public class WhileExample {
public static void main(String[] args) {
int second = 0;
while (true) {
second++;
System.out.println("시간이 " + second + " 지났습니다.");
}
}
}
/*
...
시간이 14183 지났습니다.
시간이 14184 지났습니다.
시간이 14185 지났습니다.
시간이 14186 지났습니다.
시간이 14187 지났습니다.
시간이 14188 지났습니다.
시간이 14189 지났습니다.
시간이 14190 지났습니다.
시간이 14191 지났습니다.
...
*/
WHILE문은 true/false를 나누는 조건식으로만 구성되어 있기 때문에 조건식에 true를 넣으면 무한히 반복할 수 있습니다. 그런데 탈출할 방법이 없군요. 이럴 땐 BREAK문으로 탈출할 수 있습니다. 스위치 구문을 공부할 때 잠깐 봤었던 키워드입니다. BREAK문을 이용해 위 예제를 100으로 끊어보겠습니다.
public class WhileExample {
public static void main(String[] args) {
int second = 0;
while (true) {
second++;
System.out.println("시간이 " + second + " 지났습니다.");
//만약 second가 100이면 break!
if(second==100) break;
}
}
}
/*
...
시간이 97 지났습니다.
시간이 98 지났습니다.
시간이 99 지났습니다.
시간이 100 지났습니다.
*/
IF문과 조합하여 변수가 100에 도달하면 반복문을 멈추었습니다. BREAK문을 봤으니 CONTINUE문도 한번 살펴봐야겠군요. BREAK문과 달리 CONTINUE문은 멈추는 것이 아니라 건너뛰는 역할을 수행한다. 예를 들어 짝수인 경우는 출력하지 않고 건너 뛰는거죠. 이번 예시에서 짝수는 건너뛰고(CONTINUE), 101까지 순회하도록 제한을 두겠습니다(BREAK).
public class WhileExample {
public static void main(String[] args) {
int second = 0;
while (true) {
second++;
if(second%2 == 0) continue;
System.out.println("시간이 " + second + " 지났습니다.");
if(second==101) break;
}
}
}
/*
...
시간이 95 지났습니다.
시간이 97 지났습니다.
시간이 99 지났습니다.
시간이 101 지났습니다.
*/
2로 나누어 떨어지는 짝수는 건너뛰고 홀수만 출력했습니다. 참고로 여기서 출력 메소드를 IF CONTINUE문 보다 먼저 쓰면 짝수를 건너뛰기 전에 미리 순회하여 출력하기 때문에 출력 메소드를 IF CONTINUE문 다음에 넣어주어야합니다.
또한 BREAK문과 CONTINUE가 영향을 미치는 곳은 가장 가까운 FOR나 WHILE 반복문입니다. 만약 이중 FOR문이나 이중 WHILE문의 경우에는 안 쪽 반복문에만 영향을 미치는 것이죠.
이번에는 DO-WHILE문에 대해 알아보겠습니다. DO-WHILE문은 조건식에 의해 반복 실행한다는 점에서는 WHILE문과 동일합니다. DO-WHILE문은 블록 내부의 실행문을 우선 실행시키고 실행 결과에 따라서 반복 실행을 계속 할지 결정합니다. 즉 WHILE문이 조건식에 맞춰 실행문을 실행한다면, DO-WHILE문은 실행문을 먼저 실행한 뒤 조건식으로 실행문을 평가하는 식입니다.
DO-WHILE문의 코드 형태를 확인해보겠습니다.
이렇게 보면 WHILE문에서 실행문을 앞으로 끌고 나오기 위해서 do 키워드를 사용한 것처럼 보이네요 예제를 보겠습니다.
public class WhileExample {
public static void main(String[] args) {
int i = 1; // 초기값 설정
do {
System.out.println(i); // 실행문
i++; // 증감식
} while (i <= 10); // 조건식
}
}
/*
1
2
3
4
5
6
7
8
9
10
*/
초깃값을 설정하는 부분과 실행문 영역이 조건식 앞 쪽으로 나와 있는 것을 볼 수 있습니다.
(1)실행문이 모두 실행
(2)조건식을 평가. 결과가 true이면 반복 실행을 하고, false이면 do-while문을 종료
이렇게 정리해볼 수 있겠네요 일반적으로 DO-WHILE문은 입력값을 받고 입력 값을 실행문으로 실행한 이후에 조건식으로 평가하는 형태를 구성할 때 쓰입니다.
'JAVA' 카테고리의 다른 글
[Snack Java] 13. 자바의 클래스(Class), 객체(Object), 인스턴스(Instance) (0) | 2022.07.03 |
---|---|
[Snack Java] 12. 자바의 배열 (Array) (0) | 2022.06.06 |
[Snack Java] 10. 자바의 반복문 (FOR문, 향상된 FOR문) (0) | 2022.06.05 |
[Snack Java] 9. 자바의 조건문 (SWITCH문) (0) | 2022.06.05 |
[Snack Java] 8. 자바의 조건문 (IF문) (0) | 2022.06.05 |