본문 바로가기

JAVA

자바 반복문 while, for 차이 - 언제 무엇을 사용해야 할까

while문과 for문은 가장 기본적인 반복문 구조로 서로 간에 변환이 가능하다. 

1을 10번 출력하고 싶다고 하면, 다음과 같이 구현할 수 있다.

 

< for문으로 구현 >

for (int i=0; i<10; i++) {
  System.out.println("1");
}


< while문으로 구현 >

int i=0;

while (i<10) {
  System.out.println("1");
  i++;
}

 

둘다 i를 0으로 초기화한 상태에서, i를 1씩 늘려가며 10이 되기 직전까지 출력문을 반복한다. 일반적으로는 반복 횟수를 아는 경우 for, 모르는 경우 while을 쓰라고 말하는데, 반복 횟수를 아는 경우는 무조건 for을 쓰는 게 좋은가?

 

반드시 그렇지는 않다. 우선 둘의 기본 구조를 보면 다음과 같다.

for(시작 조건; 반복 조건; 진행 조건) {
  반복 내용;
}
while (반복 조건) { 
  반복 내용;
}

 

나는 직관적으로 while을 쓰는 경우가 많은데, 다음과 같은 경우들이다. 

 

1) for문의 구조를 보면 시작 조건을 입력할 때 반드시 변수를 초기화시킨다. 즉 for 문 안에서 변수의 초기화가 이루어지는 것이다. 따라서 루프를 시작하기 전에 이미 변수가 초기화되어있다면 while을 쓰는 것이 더 직관적이다. 반복 횟수가 정해져있다고 하더라도, 굳이 다시 초기화를 하면서 for문을 사용할 필요는 없다. 

2) 또, 가독성 측면에서 while문이 더 나은 측면도 있다. for (int i=0; i<num; i++) 보다는 while (i<num) 이 더 간단하고 직관적이다. 변수 이름이나 코드의 길이가 길어질수록 더욱 그렇다. 한 줄에 내용을 집약해서 넣느냐, 여러 줄에 나눠 넣느냐의 차이이다.

3) 이 외에도 무한 루프를 구현하고 싶은 경우 while (true) 로 쉽게 작성 가능하므로 while을 쓴다. 

 

다만 파이썬에서는 for문 더 편한 경우가 많다. 프로그래밍을 할 때는 다양한 곳에서 변수를 끌어오고 복잡한 요소를 고려하게 되기 때문에, 언제 써야할 지 명확하게 구분하려고 하고 정답을 정해놓는 것 보다는 둘 다 어떻게 쓰는지를 잘 알고 있고, 두 구문 간에 자유롭게 변환할 수 있도록 연습하는 것이 더 중요하다고 생각한다.