Java (자바)

[Java] 반복문 - while 문 / 레벨업 로직 구현해보기

Oscar:) 2022. 4. 17. 20:47

 

지난 포스팅에서는 for문에 대해 알아보았다.

 

이번 포스팅에서도 반복문 중 하나인,

while문에 대해 알아보겠다.

 


while은 '~ 동안', '~ 하는 동안' 이라는 의미를 가지고 있다.

 

의미 그대로, '조건식이 true인 동안' 반복한다.

'조건식이 false이면' 반복을 멈춘다.

 

조건식을 true로 넣어줄수도 있고,

for문과 마찬가지로, 비교연산을 통해 조건식을 넣어줄 수도 있다.

 

while문의 사용 문법은 다음과 같다.

while (조건식) { 반복 내용 }


for문에 비해서 문법이 간편해 보인다.
(초기값 설정과 증감연산이 없기 때문이다)

 

while 문을 사용해서 레벨업 로직 구현

첫번째 시도

 

앞서 포스팅했던 for문에서 반복문의 기초적인 내용을 다루어봤기 때문에,

곧바로 응용 과정을 시도해보겠다.

 

뭔가 복잡스러워 보이지만,,, 사실 별 것 없다.

간단히 코드를 풀이해보자면 다음과 같다.

 

1. 레벨업 과정에 필요한 수치들을 변수에 담아서 선언.
2. while (true) {내용} : 따로 false 케이스를 작성하지 않았기에 무한 반복.

{2. while문 내용}
2-1. 사용자의 정보(레벨, 경험치)를 표시해주는 텍스트 출력.
2-2. 자바 스캐너를 이용하여 획득 경험치를 입력 받음.
2-3. 레벨업 로직 작성.

※ 레벨업 로직 : if문을 사용 '만약 exp가 fullExp보다 크거나 같다면'
· exp - fullExp : 레벨업 하고 남은 경험치를 표시해야함
· level += 1 : 1레벨 증가
· fullExp += 5 : 최대 경험치량 5증가

 

획득 경험치를 입력할 때마다, 레벨업이 적용되는 것을 확인할 수 있다.

하지만 문제가 하나 발생하였는데...

 

최대 경험치가 넘는 수치의 경험치를 획득하였을 때,

연속으로 레벨업하지는 않고 경험치가 가득 쌓이는 모습을 볼 수 있다.

 

이는 조건문과 반복문의 특성을 보여준다.

if문과 for문, while문은 해당 내용을 {중괄호} 에 작성하는데,
조건식의 내용이 true일 때 {중괄호}의 내용이 실행되는 특징이 있다.
코드가 해당 {중괄호}의 내용을 한바퀴 돌고 나오는 느낌으로 이해하면 쉽다.

 

코드의 문제점 ↓

이해를 돕기위해 끄적였다 ㅇ.ㅇ

위 코드는 if문이 해당 조건식에 맞게 {중괄호}의 내용을 실행했지만,

딱 1번 실행하고 if문의 {중괄호}를 빠져나간 것이다.

 

그리하여, 대량의 경험치를 얻었을 경우

레벨업 로직을 1번 돌고 빠져나오지 않고, 여러번 실행해야 된다는 것을 깨닫을 수 있다.

 


while 문을 사용해서 레벨업 로직 구현

두번째 시도

 

빨간 밑줄은 에러 표시가 아닌, 그림판으로 표시한 부분이다.

대량의 경험치를 획득하였을 때, 연속 레벨업을 성공하였다 !

 

if문을 사용하였던 로직을 while문으로 수정하였고, 결과적으로

while문 안에 while문을 넣게 되었다.

 

빨간 밑줄 친 while문의 경우로 다시 한번 설명을 덧붙이자면

'조건식이 true' 일 때만 반복하는 특성으로 인해서
최대 경험치보다 경험치가 더 많은 동안 계속 반복하게 되고,

경험치가 최대 경험치보다 작아졌을 때 (조건식이 false가 됨)
해당 while문을 빠져나와서 더 이상 반복하지 않게 되는 것이다.

 


while 문을 사용해서 레벨업 로직 구현

세번째 시도

 

두번째 시도만에 성공적으로 로직을 구현하였지만,

지난 포스팅에서 알아봤던 for문을 이번 포스팅의 while문과 비교할 겸 해서..

 

while문의 역할을 for문이 해낼 수 있을지, 궁금증이 생겨버려서... 시도해보았다.

 

빨간 밑줄은 에러 표시가 아닌, 그림판으로 표시한 부분이다.

앞서 두번째 시도 때, while문이 있던 자리를 for문으로 대체하였다.

결과는 예상외로(?) 성공적이었다.

 

 

for문과 while문의 공통점은 조건식의 존재이고,

차이점은 초기화식과 증감식의 유무라고 느꼈다.

 

그리하여 for문의 문법을 작성하고, 초기화식과 증감식은 작성하지 않았는데

while문의 역할을 그대로 수행해주며, 코드는 의도대로 정상 작동된 것을 확인할 수 있었다.

(그런데 for문의 조건식이 좀 꼴사납게 생기긴 했다. 그냥 while로 사용해야겠다.)

 


지난 포스팅에 이어, 이번 포스팅까지 자바의 반복문에 대해 알아봤다.

 

for문과 while문은 서로 대체될 수 있다는 것을 직접 느꼈고,

상황에 따라 더 적절하겠다 싶은 방법으로 사용하면 될 것 같다.

 

 

↓ 개인적인 의견 ↓

· for문은 수학적인 내용을 다룰 때 사용을 추천한다.
 (반복횟수를 설정해줄 때, 초기값 선언이 필요할 때 등)

· while문은 true와 false를 구분할 수 있는 대부분의 경우에 추천한다.
(for문 보다 편의성이 훨씬 좋다고 느낀다)