안녕하세요.
이번 시간에는 제어문 반복문(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문에 대해서 포스팅하겠습니다.
궁금하신 점이나 잘못된 점이 있으면
댓글 남겨주시면 수정하도록 하겠습니다.
감사합니다.

'개발언어 > JAVA' 카테고리의 다른 글
Java 개발을 위한 제어문 (반복문_for) (0) | 2023.08.06 |
---|---|
Java 개발을 위한 제어문 (반복문_do~while) (0) | 2023.08.06 |
Java 개발을 위한 제어문 (조건문_Switch ~ case) (0) | 2023.08.06 |
Java 개발을 위한 제어문 (조건문_if_else if_else) (0) | 2023.08.06 |
Java 개발을 위한 자바 연산자_3 (0) | 2023.08.06 |