본문 바로가기
개발언어/JAVA

Java 개발을 위한 제어문 (반복문_while)

by 이엘리야 2023. 8. 6.

안녕하세요.

이번 시간에는 제어문 반복문(while, do ~ while, for, foreach) 중

while문에 대해서 알아볼까 합니다.

 

반복문에는 while문과 do~while문, for문과 foreach문이 있습니다.

이번 포스팅에서는 while문에 대해서 자세히 알아보도록 하겠습니다.

 

먼저 while문은 조건을 만족하는 동안, { } 중괄호 블록 내의 실행문을

계속 실행하는 반복문입니다.

 

while문의 구조를 잠깐 보시게 되면

이런 식으로 작동하는 것을 볼 수 있습니다.

while문이 실행되고 조건이 참일 경우 반복 실행할 문장을 출력하고

끝나는 게 아니라 다시 조건으로 돌아가 조건이 끝날 때까지 문장을 출력 후

조건이 거짓이 될 경우 그 즉시 while문을 종료해 버립니다.

 

예시를 하나 들어보도록 하겠습니다.

1부터 10까지 더하는 프로그램을 만들고 싶다고 가정했을 때

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8+ 9 + 10을 하여 결과값이 55가 나와야 합니다.

반복문을 사용하지 않고 진행을 하게 된다면 각 변수에 값을 넣은 후에

출력할 때 모든 수를 더해줘야만 결과를 출력할 수 있습니다.

 

먼저 반복문을 사용하지 않았을 때부터 보도록 하겠습니다.

위와 같이 각 변수에 값을 집어넣고 출력할 때 더하는 것과

출력할 때 그냥 숫자를 다 더하는 것

이렇게 사용할 수 있습니다.

하지만 저희는 저렇게 코드를 짜기 위해 자바를 배우는 것이 아니겠죠?

초등학생도 다 할 수 있는 더하기를 그저 출력문에 집어넣어 출력하는 것을

배우기 위해 이 포스팅을 읽고 계신다면... 

조심스럽게 뒤로 가기를 눌러주세요

 

이렇게 그저 결과값만 뽑아내기 위한 더하기를 해봤는데

이제 while문을 사용해 봐야겠지요?

이렇게 조건이 될 num과 그 값을 저장할 sum이라는 변수를 만들어 1과 0으로 초기화시켜줍니다.

num에 1을 넣어준 이유는 저희는 1부터 10까지의 합을 출력하기 위함입니다.

sum은 1부터 10까지의 합을 저장하기 위한 변수입니다.

이제 while문을 보면 num <= 10이라는 조건이 보입니다.

 

처음 1 <= 10일 때 1은 10보다 작으므로 첫 번째 반복이 시작됩니다.

sum이라는 변수에 sum과 num 즉 0과 1을 더하여 저장합니다.

그렇게 되면 sum 안에는 1이라는 값이 저장이 되고

아래 후위 연산자인 num++가 실행되어 num값이 2로 증가합니다.

 

num값이 2가 된 상태에서 두 번째를 실행하면 2 <= 10 2가 10보다 작으므로

두번째 반복이 실행됩니다.

sum이라는 변수에 sum과 num 즉 1과 2를 더하여 저장합니다.

그렇게 되면 sum 안에는 3이라는 값이 저장되고

후위 연산자인 num++가 실행되어 num값이 3으로 증가합니다.

.

.

.

num값이 10이 된 상태에서 열 번째를 실행하면 10<=10 10과 10은 같으므로

열번째 반복이 실행됩니다.

sum이라는 변수에 sum과 num 즉 45와 10을 더하여 저장합니다.

그렇게 되면 sum안에는 55라는 값이 저장되고

후위 연산자인 num++가 실행되어 num값이 11로 증가합니다.

 

이렇게 num값이 11로 증가된 상태에서 다시 한번 돌아가지만

num <=10 즉 11 <= 10인 상태가 되어 조건이 거짓이 되어 

조건문을 빠져나오게 됩니다.

그리하여 55라는 결과값이 나오게 됩니다.

이렇게 단순변수와 반복만으로도 1 ~ 10까지의 합을 정확하게

출력해 낼 수 있으며 처음 모든 변수에 1부터 10까지 집어넣어 출력하는 것보다

훨씬 짧은 구문이 되었지요?

 

이런 식으로 while문을 활용할 수 있으며

현재는 조건을 10까지라고 정해놓고 실행했지만

입력을 받아 그 변수를 조건값에 대입을 해주면 그 이상의

합도 출력해 낼 수 있습니다.

 

여기서 앞서 배운 

대입 연산자와 증감 연산자를 같이 사용하실 수 있다는 거 아시나요?

그렇게 되면 두줄로 작성한 코드가 한 줄로 될 수 있답니다!

우선 대입연산자를 활용했을 때는

이 코드가

이렇게 변경될 수 있고 여기에 증감 연산자까지 추가한다면

이렇게 한 줄만으로도 위에 sum과 num을 더하여 sum에 집어넣고

num값을 1 증가시키는 것을 한 번에 해결할 수 있습니다!

 

이런 식으로 응용해서도 사용 가능하니

연구해 볼 만하죠? :)

 

이때 num++ 로 증감되어 1이 증가된 상태로 계산되지 않을까

생각하시는 분이 계실 텐데

후위연산자로 연산 순위가 가장 낮아 sum에 값이 대입한 후에

num 값이 증가한답니다.

 

즉 + (더하기) 연산이 수행된 후

= (대입) 연산이 수행되고

대입이 완료된 후 ++ 후위 연산이 진행됩니다.

여기서 전위 연산을 사용하게 되면

최우선 순위로 적용되어

65라는 결과값이 도출됩니다

첫 번째 1이라는 값이 num에 들어왔을 때

1 <= 10이라는 조건에 만족하여 

sum += ++num 이 실행되는데

이때 문제가 발생하는 게

전위연산자가 우선순위를 가지기 때문에

num값은 2로 변한 후에

sum + num 즉 0 + 2가 됩니다.

다음 연산 또한

sum + num이 2 + 3이 되어

1부터 10까지 합이 아니라

2부터 11까지의 합이 진행되게 됨으로 65라는 값이 나오게 됩니다.

 

이렇게 한 줄 코드로 작성하는 것이 좋지만 연산순위에 대해 알아놓고

사용하시는 편이 좋습니다!

 

이렇게 while문에 대해서 알아봤는데

이해는 좀 되셨을까요?

 

다음 포스팅에서는 do~while문에 대해서 포스팅하겠습니다.

 

궁금하신 점이나 잘못된 점이 있으면

댓글 남겨주시면 수정하도록 하겠습니다.

 

감사합니다.