[JAVA/자바] 반복문
반복문은 이름 그대로 특정 코드를 반복해서 실행할 때 사용한다.
자바는 다음 3가지 종류의 반복문을 제공한다.
while, do-while, for
while문
while문은 조건에 따라 코드를 반복해서 실행할 때 사용한다.
while (조건식) {
// 코드
}
- 조건식을 확인한다. 참이면 코드 블럭을 실행하고, 거짓이면 while문을 벗어난다.
- 조건식이 참이면 코드 블럭을 실행한다. 이후에 코드 블럭이 끝나면 다시 조건식 검사로 돌아가서 조건식을 검사한다. (무한반복)
do-while문
do-while 문은 while 문과 비슷하지만, 조건에 상관없이 무조건 한 번은 코드를 실행한다.
do {
// 코드
} while (조건식);
- do-while문은 최초 한 번은 항상 실행된다.
- 코드 블럭을 실행 후에 조건식을 검증한다.
- 최초 한 번은 코드 블럭을 꼭 실행해야 하는 경우에 사용하면 된다.
break, continue
break와 continue는 반복문에서 사용할 수 있는 키워드다.
break는 반복문을 즉시 종료하고 나간다.
continue는 반복문의 나머지 부분을 건너뛰고 다음 반복으로 진행하는데 사용된다,
참고로 while, do-while, for와 같은 모든 반복문에서 사용할 수 있다.
break
while(조건식) {
코드1;
break; // 즉시 while문 종료로 이동한다.
코드2;
}
// while문 종료
- break를 만나면 코드2가 실행되지 않고 while문이 종료된다.
continue
while(조건식) {
코드1;
continue; // 즉시 조건식으로 이동한다.
코드2;
}
- continue를 만나면 코드2가 실행되지 않고 다시 조건식으로 이동한다. 조건식이 참이면 while 문을 실행한다.
for문
fof문도 while문과 같은 반복문이고, 코드를 반복 실행하는 역할을 한다.
for문은 주로 반복 횟수가 정해져 있을 때 사용한다.
for (1.초기식; 1.조건식; 4.증감식) {
// 3.코드
}
for문은 다음 순서대로 실행된다.
1. 초기식이 실행된다. 주로 반복 횟수와 관련된 변수를 선언하고 초기화할 때 사용한다. 초기식은 딱 1번 사용된다.
2. 조건식을 검증한다. 참이면 코드를 실행하고, 거짓이면 for문을 빠져나간다.
3. 코드를 실행한다.
4. 코드가 종료되면 증감식을 실행한다. 주로 초기식에 넣은 반복 횟수와 관련된 변수의 값을 증가할 때 사용한다.
5. 다시 2.조건식부터 시작한다. (무한 반복)
for문은 복잡해 보이지만 while문을 조금 더 편하게 다룰 수 있도록 구조화한 것뿐이다.
예를 들어 1부터 10까지 출력하는 for문은 다음과 같다.
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
1. 초기식이 실행된다. int i = 1
2. 조건식을 검증한다. i <= 10
3. 조건식이 참이면 코드를 실행한다. System.out.println(i);
4. 코드가 종료되면 증감식을 실행한다. i++
5. 다시 2.조건식을 검증한다. (무한 반복) 이후 i <= 10 조건이 거짓이 되면 for문을 빠져나간다.
while문과 for문을 비교했을 때 for문이 더 깔끔하다는 느낌을 받을 것이다.
for문은 초기화, 조건 검사, 반복 후 작업 등이 규칙적으로 한 줄에 모두 들어 있어 코드를 이해하기 더 쉽다.
특히 반복을 위해 값이 증가하는 카운터 변수를 다른 부분과 명확하게 구분할 수 있다.
for (int i = 1; i <= endNum; i++)
여기서는 바로 변수 i가 카운터 변수이다. 증가하면서 반복 횟수가 올라가고,
또 변수 i를 사용해서 계속 반복할지 아니면 빠져나갈지 판단할 수 있다.
이렇게 반복 횟수에 직접적인 영향을 주는 변수를 선언부터, 값 증가, 또 조건식에 활용까지
for (초기식; 조건식; 증감식) 구조를 활용해서 처리하는 것이다.
덕분에 개발자는 루프 횟수와 관련된 코드와 나머지 코드를 명확하게 구분할 수 있다.
반면에 while을 보면 변수 i를 선언하는 부분 그리고 i++로 증가하는 부분이 기존 코드에 분산되어 있다.
for문에서 초기식, 조건식, 증감식은 선택이다. 다음과 같이 모두 생략해도 된다.
단 생략해도 각 영역을 구분하는 세미콜론( ; )은 유지해야 한다.
for (;;) {
// 코드
}
이렇게 하면 조건이 없기 때문에 무한 반복하는 코드가 된다. 따라서 다음과 같은 코드가 된다.
while (true) {
// 코드
}
중첩 반복문
반복문은 내부에 또 반복문을 만들 수 있다. for, while 모두 가능하다.
package loop;
public class Nested1 {
public static void main(String[] args) {
for (int i = 0; i < 2; i++) {
System.out.println("외부 for 시작 i : " + i);
for (int j = 0; j < 3; j++) {
System.out.println("-> 내부 for " + i + " - " + j);
}
System.out.println("외부 for 종료 i : " + i);
System.out.println(); // 라인 구분을 위해 실행
}
}
}
실행 결과
while vs for
for문
장점
1. 초기화, 조건 체크, 반복 후의 작업을 한 줄에서 처리할 수 있어 편리하다.
2. 정해진 횟수만큼의 반복을 수행하는 경우에 사용하기 적합하다.
3. 루프 변수의 범위가 for 루프 블록에 제한되므로, 다른 곳에서 이 변수를 실수로 변경할 가능성이 적다.
단점
1. 루프의 조건이 루프 내부에서 변경되는 경우, for 루프는 관리하기 어렵다.
2. 복잡한 조건을 가진 반복문을 작성하기에는 while문이 더 적합할 수 있다.
while문
장점
1. 루프의 조건이 루프 내부에서 변경되는 경우, while 루프는 이를 관리하기 쉽다.
2. for 루프보다 더 복잡한 조건과 시나리오에 적합하다.
3. 조건이 충족되는 동안 계속해서 루프를 실행하며, 종료 시점을 명확하게 알 수 없는 경우에 유용하다.
단점
1. 초기화, 조건 체크, 반복 후의 작업이 분산되어 있어 코드를 이해하거나 작성하기 어려울 수 있다.
2. 루프 변수가 while 블록 바깥에서도 접근 가능하므로, 이 변수를 실수로 변경하는 상황이 발생할 수 있다.
한 줄로 정리하자면 정해진 횟수만큼 반복을 수행해야 하면 for문을 사용하고 그렇지 않으면 while문을 사용하면 된다.