1. while문이란?
while문은 프로그래밍에서 반복적인 작업을 수행하기 위해 사용되는 제어문이다.
특징으로는 while문은 주어진 조건이 참(True)인 동안에만 블록 내의 코드를 반복적으로 실행하게 되고 조건이 거짓(False)이 되면 반복을 중단하고, while문을 탈출하게 된다. 주로 조건의 만족 여부를 기다리는 상황이나, 반복 횟수가 미정인 경우에 사용된다.
장점
조건에 따라 동적으로 반복 횟수를 조절할 수 있다. 따라서 반복횟수가 미리 정해지지 않은 상황에서 유용하게 사용된다.
코드의 직관성이 높아, 복잡한 로직을 구현하는 데에도 효과적이다.
단점
조건식의 수정 또는 관리가 제대로 이루어지지 않으면 무한 루프에 빠질 위험성이 존재한다. 그러므로 주의해야 한다.
때로는 다른 반복문(for문 등)에 비해 상대적으로 실행 속도가 느릴 수 있다.
예제 1
int i = 0;
while (i < 5) {
System.out.println(i);
i++;
}
이 코드를 실행시켰을때, i값이 5가 되는 순간, i < 5라는 조건이 거짓이 되는 순간 while문을 탈출하게 된다. (참인 경우 무한루프)
이처럼 특정 코드를 반복해서 실행할 때 사용되는 문법이 바로 반복문이라고 한다.
예제 2
1부터 하나씩 증가하는 수를 3번 더하기
public class While2 {
public static void main(String[] args) {
int sum = 0;
sum = sum + 1; //sum(0) + 1 -> sum(1)
System.out.println("i=" + 1 + " sum=" + sum);
sum = sum + 2; //sum(1) + 2 -> sum(3)
System.out.println("i=" + 2 + " sum=" + sum);
sum = sum + 3; //sum(3) + 3 -> sum(6)
System.out.println("i=" + 3 + " sum=" + sum);
}
}
출력결과
i = 1 sum = 1
i = 2 sum = 3
i = 3 sum = 6
정답은 맞지만 반복문을 사용하지 않는다면 단위가 늘어남에 따라 하드코딩을 해야할 수도 있다.
예제 3
i부터 하나씩 증가하는 수를 endNum(마지막 수)까지 더해라 (i ~ endNum 더하기)
public class While2 {
public static void main(String[] args) {
int sum = 0;
int i = 1;
int endNum = 3;
while (i <= endNum) {
sum = sum + i;
System.out.println("i=" + i + " sum=" + sum);
i++; }
} }
endNum만 변경하면 원하는 횟수만큼 코드를 반복 실행할 수가 있다.
i = 1, endNum=3 이라면 3번 반복하게 되고, endNum이 100이 되면 100번 반복하게 된다.
i가 endNum보다 크게 되면 자동으로 while문을 종료하게 된다.
2. do-while문
do-while문은 while문과 비슷하지만, 조건에 상관없이 무조건 코드를 실행하고 종료를 하게된다.
장점
조건에 따라 동적으로 반복 횟수를 조절할 수 있다. 따라서 반복 횟수가 미리 정해지지 않은 상황에서 유용하게 사용할 수 있다.
무조건적으로 최소 한 번은 코드 블록을 실행하므로, 사용자의 입력을 받거나, 특정 연산을 최소 한 번은 수행하는 경우에도 유용하다.
단점
조건식의 수정 또는 관리가 제대로 이러어지지 않으면 무한 루프에 빠질 위험이 있다.
때로는 다른 반복문(while문, for문 등)에 비해 상대적으로 실행 속도가 느릴 수 있다.
예제
int i = 5;
while (i < 5) {
System.out.println(i);
i++;
}
while문의 경우 i < 5라는 조건이 거짓이기때문에 while문 내부의 코드는 실행되지 않으므로 아무것도 출력되지 않는다.
이에 반해 do-while문의 경우
int i = 5;
do {
System.out.println(i);
i++;
} while (i < 5);
이 코드를 실행시키게 되면, do-while문은 조건 검사를 나중에 하기 때문에 조건이 거짓이더라도 do-while문 내부의 코드는 최소한 한 번은 실행이 된다. 따라서 이 경우에는 '5'를 출력한 후에 조건을 검사해 반복을 중단하게 된다.
즉, while문은 조건이 참일 때만 코드를 실행하고, do-while문은 조건에 상관없이 먼저 코드를 한 번 실행한 뒤에 조건을 검사한다는 것이 가장 큰 차이점을 가진다.
3. continue
continue는 프로그래밍에서 특정 조건을 만족할 때 반복문의 나머지 부분을 건너뛰고 다음 반복으로 직접 넘어갈 수 있도록 할 수 있고, 특정 조건에서 불필요한 계산을 피하고 싶을 때나 결과에 영향을 미치지 않을 경우 continue문을 사용하여 불필요한 계산을 건너뛸 수 있다.
이를 적정히 이용한다면 실행 시간을 줄이고 시스템 자원을 효율적을 활용할 수 있게 된다. 하지만 과도하게 사용할 경우 코드의 가독성을 떨어뜨릴 수 있고, 이러한 제어문을 사용할 때는 프로그램의 흐름을 정확하게 이해하고 있어야만 예상치 못한 버그를 방지할 수 있다. (숙련도가 낮으면 억지로 리소스 높이기 위해 쓰기엔 위험 부담이 크다.)
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue;
}
System.out.println(i);
}
이 경우 i가 짝수일 때, if (i % 2 == 0) 조건문이 참이 되어 continue가 실행된다. continue문이 실행되면 현재 반복에서 남은 부분(sout(i))을 건너뛰고, 즉시 다음 반복으로 넘어가게 된다. 쉽게 설명하면, i가 2인 경우 (i % 2 == 0)조건문이 참이되고 continue가 실행되게 되는데 이로 인해서 sout(i)는 실행되지 않고, i가 3이 되어 다음 반복으로 넘어가게 된다.
그렇기 때문에 짝수는 출력되지 않고 1, 3, 5, 7, 9 만 화면에 출력되게 된다.
4. 마치며
if문이나 for문은 사용할 일이 꽤 많기도 하고 단축키로 문법의 기본 틀이 완성되어 있어서 익숙한 개념이었다고 한다면, while문의 경우 코테나 알고리즘을 하지 않는 이상 쓸 일이 잘 없어서 Java와 Javascript에서 배웠지만 처음보는 느낌이 들었다. 사실 오늘 공부하면서 while문이 거짓이 되는 즉시 출력하지 않고 종료하는지 몰랐고... do-while문이 거짓이 된 '부분'까지 엔드포인트를 잡고 출력을 해준다는 것을 오늘 알게 되었다. 그리고 continue문의 경우 말 그대로 계속? 된다 생각해서 while문을 탈출시키지 않고 계속 돌아가게끔 하는건가...? 하고 있었는데 제외를 한다는 사실도 지금 알게 되었다. 지금 알게된게 참 많다^^... 진짜 아무리 배워도 자주 사용하지 않는다면 그 개념을 잊어버리는건 시간 문제인것 같다. 꾸준히 복습하는 수 밖에 없겠다☹️☹️
'Language > Java' 카테고리의 다른 글
반복문 for (0) | 2023.12.13 |
---|---|
반복문 for-each (0) | 2023.12.12 |
조건문 switch (0) | 2023.12.09 |
조건문 if (0) | 2023.12.09 |
String과 StringBuilder (0) | 2023.12.04 |
쓰임 있는 사람이 되기 위해 노력 중입니다.