반응형
do while문을 사용하는 방법과, 왜 사용하는지에 대해 정리해보고자 합니다.
while문의 사용
while문은 조건식이 참인 경우 반복을 지속하는 반복문입니다.
while(true) {
System.out.println("hi");
}
// hi 무한 출력
int count = 0;
while(count < 3) {
System.out.println(count);
count += 1;
}
// 0 1 2 출력
do-while문의 사용
do {
System.out.println("hi")
} while(true)
// hi 무한 출력
int count = 0;
do {
System.out.println(count);
count += 1;
} while(count < 3)
// 0 1 2 3 출력
위의 while문 코드를 그대로 do while문으로 변경한 코드입니다.
0 1 2 가 출력된 while문이,
do while문에서는 0 1 2 3이 출력됨을 알 수 있습니다.
그렇다면 do while문을 왜 사용하는 것일까요..
그 이유에 대해 정리해보겠습니다.
do-while문을 사용하는 이유
1, 4가 이미 들어있는 numbers라는 리스트가 있습니다.
1과 9 사이의 랜덤 숫자를 뽑아 numbers에 넣고 싶은데,
이미 들어 있는 숫자는 안 된다고 하겠습니다.
예제 코드 - while문 사용)
class practice {
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 4));
int randomNumber = 0;
boolean isIn = true;
while (isIn) {
randomNumber = Randoms.pickNumberInRange(1, 9); // 1과 9 사이 숫자를 랜덤 반환
isIn = number.contain(randomNumber); // randomNumber가 numbers에 이미 들어 있는지 여부
}
numbers.add(randomNumber);
}
while문으로 number에 들어있지 않은 숫자를 뽑을 때까지
randomNumber에 새로운 수를 가져오는 식으로 구현했습니다.
그런데, while의 반복이 지속되는 조건(isIn)은 number에 이미 randomNumber가 들어있다는 것입니다.
그런데 randomNumber를 뽑기도 전에 isIn이 true라는 것은 코드의 가독성 측면에서 좋지 않습니다.
예제 코드의 수정 - do while 적용)
class practice {
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 4));
int randomNumber = 0;
boolean isIn;
do {
randomNumber = Randoms.pickNumberInRange(1, 9); // 1과 9 사이 숫자를 랜덤 반환
isIn = number.contain(randomNumber); // randomNumber가 numbers에 이미 들어 있는지 여부
} while(isIn)
numbers.add(randomNumber);
}
위처럼 do while문을 사용하면,
isIn에 초기값을 설정하지 않아도 되고,
자연스러운 흐름으로 코드를 구현할 수 있습니다.
이처럼,
"어떤 행동을 최소 1회 수행해야만 -> 반복 여부가 결정"되는 경우에는
do while문을 쓰는 것이 적절합니다.
반응형
'Java' 카테고리의 다른 글
[Java] 간단한 예외처리(try catch) 원리 (feat. throws IllegalArgumentException은 왜 빨간 줄이 안 생길까?) (0) | 2022.11.16 |
---|---|
멤버 변수, 클래스 변수, 인스턴스 변수 란? - 자바 용어 정리 (0) | 2022.11.11 |
자바 테스트 에러 해결 - java.lang.assertionerror: expecting code to raise a throwable. (0) | 2022.11.03 |
forEach로 예외처리하기 (Unhandled exception: java.lang.Exception 에러 해결) (0) | 2022.11.02 |
추상클래스란? 아니, 추상이란? - 무조건 이해되는 List와 ArrayList의 차이(4) (2) | 2022.11.01 |