자바 반복문 while문에 대해 알아보자
2025. 1. 6. 13:00ㆍJAVA
728x90
반응형
안녕하세요. 진득코딩입니다.
이번 시간에는 지난 시간에 이어 반복문인 while문에 대해 살펴보도록 하겠습니다.
while문은 for문에 비해 구조가 간단합니다.
그렇다면 while문은 어떤 구조이며 어떤 식으로 사용하는지 알아보도록 하겠습니다.
while문
- while문은 if문처럼 조건식과 블럭{}만으로 이루어져 있습니다.
- 다만 while문은 if문과 달리 조건식이 참(true)인 동안, 즉 조건식이 거짓이 될 때까지 블럭{} 내의 문장을 반복합니다.
while (조건식) {
// 조건식의 연산결과가 참(true)인 동안, 반복될 문장들을 적는다.
}
- while문은 먼저 조건식을 평가해서 조건식이 거짓이면 문장 전체를 벗어나고, 참이면 블럭{} 내의 문장을 수행하고 다시 조건식으로 돌아갑니다.
- 조건식이 거짓이 될 때까지 이 과정이 계속 반복됩니다.
- 또한 while문의 조건식은 for문과 달리 생략할 수 없습니다.
for문과 while문의 비교

- 위 두 코드는 완전히 동일합니다.
- for문은 초기화, 조건식, 증감식을 한 곳에 모아 놓은 것일 뿐, while문과 다르지 않습니다.
- 그래서 for문과 while문은 항상 서로 변환이 가능합니다.
- 위 예시에서는 while문 보다 for문이 더 간결하고 알아보기 쉽습니다.
- 만일 초기화나 증감식이 필요하지 않은 경우라면, while문이 더 적합할 것입니다.

- 변수 i의 값만큼 블럭{}을 반복하는 예제입니다.
- i의 값이 5이므로 'I can do it.'이 모두 5번(4~0) 출력되었습니다.
- while문의 조건식 'i-- != 0'은 i의 값이 0이 아닌 동안만 참이 되고, i의 값이 매 반복마다 1씩 감소하다 0이 되면 조건식은 거짓이 되어 while문을 벗어납니다.
- 'i--'가 후위형이므로 조건식이 평가된 후에 i의 값이 감소된다는 점에 주의해야 합니다.

- 10부터 0까지 1씩 감소시켜 가면서 출력을 하되, for문으로 매 출력마다 약간의 시간이 지연되도록 하는 예제입니다.
- 위 for문의 블럭 {} 내에는 아무 일도 하지 않는 빈 문장 ';'만 있을 뿐 그 외에는 아무것도 없습니다.
- 그저 조건식과 증감식을 2,000,000,000번 반복하면서 시간을 지연시키는 역할을 합니다.

- 사용자로부터 숫자를 입력받고, 이 숫자의 각 자리의 합을 구하는 예제입니다.
- 어떤 수를 10으로 너머지 연산하면 마지막 자리를 얻을 수 있습니다.
- 또한 10으로 나누면 마지막 한자리가 제거됩니다.

- 1부터 몇까지 더하면 누적합계가 100을 넘지 않는 제일 큰 수가 되는지 알아내는 예제입니다.
- Scanner로 숫자를 입력받게 되면 100이 아닌 다른 수를 입력받는 프로그램을 제작할 수도 있습니다.

- 사용자로부터 반복해서 숫자를 입력받다가 0을 입력하면 입력을 마치고 총합을 출력하는 예제입니다.
- 위와 같이 Scanner로 입력받는 예제에 경우 지금까지는 입력 전과 입력 후를 따로 캡처했지만 이제는 Scanner가 어떤 식으로 작동했는지 안다고 가정하고 하나의 캡처본을 사용하도록 하겠습니다.
- while문의 조건식으로 변수 flag를 사용했는데, 처음엔 flag에 true를 저장해서 계속 반복하다가 사용자가 0을 입력하면 flag의 값도 false로 바꿔서 반복을 멈추게 합니다.
- 위 while문의 조건식이 상수는 아니지만, 변수가 고정된 값을 유지하므로 무한반복문과 다름없습니다.
- 그래서 특정 조건을 만족할 때 반복을 멈추게 하는 if문이 반복문 안에 꼭 필요합니다.
do-while문
- do - while문은 while문의 변형으로 기본적인 구조는 while문과 같으나 조건식과 블럭{}의 순서를 바꿔놓은 것입니다.
- 그래서 while문과 반대로 블럭 {}을 먼저 수행한 후에 조건식을 평가합니다.
- while문은 조건식의 결과에 따라 블럭{}이 한 번도 수행되지 않을 수 있지만, do - while문은 최소한 한 번은 수행될 것을 보장합니다.
do {
// 조건식의 연산결과가 참일 때 수행될 문장들을 적습니다.
} while (조건식) ; // 끝에 ' ; '을 잊지 않도록 주의합시다.

- Math.random()을 이용해서 1과 100 사이의 임의의 수를 변수 answer에 저장하고, 이 값을 맞출 때까지 반복하는 예제입니다.
- 사용자 입력인 input이 변수 answer의 값과 다른 동안 반복하다가 두 값이 같으면 반복을 벗어납니다.

- 숫자 중에 3의 배수(3, 6, 9)가 포함되어 있으면, 포함된 개수만큼 박수를 치는 369게임을 1부터 100까지 출력하는 예제입니다.
- 10으로 나누고 10으로 나머지 연산을 합니다.
- 두 번째 반복에서만 if문의 조건식 'tmp%10%3==0 && tmp%10!=0'을 만족시키므로 '짝'이 한번 출력된다는 것을 알 수 있습니다.
- tmp%10의 값이 0일 때도 참이므로, 식 'tmp%10!=0'을 '&&'로 연결해서 tmp%10의 값이 0인 경우를 제외해야 합니다.
break문
- 반복문에서도 break문을 사용할 수 있는데, switch문에서처럼 break문은 자신이 포함된 가장 가까운 반복문을 벗어납니다.
- 주로 if문과 함께 사용되어 특정 조건을 만족하면 반복문을 벗어나도록 합니다.

- 숫자를 1부터 계속 더해 나가서 몇까지 더하면 합이 100을 넘는지 알아내는 예제입니다.
- sum의 값이 100을 넘으면 if문의 조건식이 참이므로 break문이 수행되어 자신이 속한 반복문을 즉시 벗어납니다.
- 이와 같은 무한 반복문에는 조건문과 break문이 항상 같이 사용됩니다.
continue문
- continue문은 반복문 내에서만 사용될 수 있으며, 반복이 진행되는 도중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어갑니다.
- for문의 경우 증감식으로 이동하며, while문과 do-while문의 경우 조건식으로 이동합니다.
- continue문은 반복문 전체를 벗어나지 않고 다음 반복을 계속 수행한다는 점이 break문과의 차이점입니다.
- 주로 if문과 함께 사용되어 특정 조건을 만족하는 경우에 continue문 이후의 문장들을 수행하지 않고 다음 반복으로 넘어가서 계속 진행하도록 합니다.
- 전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용합니다.

- 1과 10 사이의 숫자를 출력하되 그중에서 3의 배수인 것은 제외하도록 하였습니다.
- i의 값이 3의 배수인 경우, if문의 조건식 'i%3==0'은 참이 되어 continue문에 의해 반복문의 블럭 끝 '}'으로 이동합니다.


- 메뉴를 보여주고 선택하게 하는 예제입니다.
- 메뉴를 잘못 선택한 경우, continue문으로 다시 메뉴를 보여주고, 종료(0)를 선택한 경우 break문으로 반복을 벗어나 프로그램이 종료되도록 했습니다.
이름 붙은 반복문
- break문은 근접한 단 하나의 반복문만 벗어날 수 있기 때문에, 여러 개의 반복문이 중첩된 경우에는 break문으로 중첩 반복문을 완전히 벗어날 수 없습니다.
- 이때 중첩 반복문 앞에 이름을 붙이고 break문과 continue문에 이름을 지정해 줌으로써 하나 이상의 반복문을 벗어나거나 반복을 건너뛸 수 있습니다.

- 구구단을 출력하는 예제입니다.
- 제일 바깥에 있는 for문에 Loop1이라는 이름을 붙였습니다.
- 그리고 j가 5일 때 break문을 수행하도록 했습니다.
- 지금처럼 반복문에 이름을 붙여주고 break문에 반복문 이름을 지정해 주면 하나 이상의 반복문도 벗어날 수 있습니다.



- 메뉴를 선택하면 해당 연산을 반복적으로 수행할 수 있게 for문을 추가하였습니다.
- 반복문만 본다면 무한 반복문인 while문 안에 또 다른 무한 반복문인 for문이 중첩된 구조라는 것을 알 수 있습니다.
- while문은 메뉴를 반복해서 선택할 수 있게 해 주고, for문은 선택된 메뉴의 작업을 반복해서 할 수 있게 해 줍니다.
- 선택된 메뉴에서 0을 입력하면 break문으로 for문을 벗어나서 다른 메뉴를 선택할 수 있게 되고, 99를 입력하면 'break outer'에 의해 for문과 while문 모두를 벗어나 프로그램이 종료됩니다.
이렇게 제어문에 대한 내용들도 모두 살펴보았습니다.
이제까지 배운 조건문과 반복문을 프로그램을 만들 때 적절히 사용하게 되면 훨씬 더 좋고 효율적인 프로그램이 될 거라고 생각합니다.
이번 시간은 여기까지입니다.
궁금하시거나 문의하고 싶으신 부분이 있다면 댓글로 남겨주시면 열심히 답글 달도록 하겠습니다.
끝까지 봐주셔서 감사합니다.😊
728x90
반응형
LIST
'JAVA' 카테고리의 다른 글
자바 String 배열에 대해 알아보자 (0) | 2025.01.30 |
---|---|
자바 배열에 대해 알아보자 (2) | 2025.01.29 |
자바 반복문 for문에 대해 알아보자 (0) | 2025.01.03 |
자바 조건문 switch문에 대해 알아보자 (0) | 2025.01.02 |
자바 제어문인 조건문 if문에 대해 알아보자 (0) | 2025.01.01 |