
참고
자바의 정석
반복문은 어떤 작업이 반복적으로 수행되도록 할때 사용하며, 종류로는 for문, while문, do-while문이 있다. for문이나 while문에 속한 코드들은 조건에 따라 한번도 수행이 안될수도 있지만, do-while문은 최소한 1번은 수행한다. 또한 for문과 while문은 기능적으로 매우 비슷해서 어느 것을 써도 상관은 없지만 반복횟수를 알고 있는 경우는 for문을 사용하는 것이 좋다.
for문
- for문은 반복 횟수를 알고 있을 때 적합하다. 아래와 같이 for문을 작성 할 수 있다.
for (초기화;조건식;증감식;) {
}
- for문은 제일 처음 초기화 작업이 진행이 되고, 그 이후부터는 참인 동안 조건식 -> 수행 될 문장 -> 증감식의 순서로 계속 반복된다.
초기화
- 반복문에 사용될 변수를 초기화 하는 부분이며 처음에 1번만 수행된다.
- 보통 변수 1개로 for문을 제어하지만, 필요에 따라 변수를 다양하게 정의할 수 있다.
- 단, for문에는 변수의 개수를 줄이는 것이 더 효율적이고 가시성이 좋다.
for (int i=1; i <=10; i++) {}
for (int i=1, j=0; i<=10; i++) {}
조건식
- 조건식의 값이 참이면 반복을 계속하고, 거짓이면 반복을 중단하고 for문을 벗어난다.
- 주의해야할 점은 조건식을 잘못 적을 경우 무한루프가 발생하거나, 한번도 수행을 안 할수가 있다.
증감식
- 반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식이다.
- 주로 연산자 '++'라는 증가 연산자를 쓰지만, 감소연산자 및 증가하는 다양한 연산자를 쓸 수 있다.
- 증감식도 쉼표를 이용해 두 문장 이상을 하나로 연결해서 쓸 수 있다.
초기화, 조건식, 증감식 전부 생략이 가능하다. 생략을 할 경우 무조건 참이 되고 무한루프가 된다.
이럴 경우 블럭 안에 if문을 넣어서 특정 조건일때 for문을 벗어나야 한다.
중첩 for문
- if문 안에 if문을 넣을 수 있던것 처럼 for문안에 for문을 넣을 수 있다.
향상된 for문 (enhanced for statement)
- JDK1.5부터 배열과 컬렉션에 저장된 요소에 접근 할 때 기존보다 편리한 방법으로 처리할수 있도록 추가된 문법이다.
for (int i = 0; i < arr.length; i++) {
System.out.printf("%d ", arr[i]);
}
for (int j : arr) {
System.out.printf("%d ", j);
sum += j;
}
- 향상된 for문은 일반적으로 for문과 달리 배열이나 컬렉션에 저장된 요소들을 읽어오는 용도로만 사용된다.
while문
- for문에 비해 while문 구조가 간단하다. while문은 조건식이 참인동안 계속 수행된다.
while (조건식) {
}
while문 동작 순서
1. 조건식이 참이면 블럭안으로 들어가고 거짓이면 while문을 벗어난다.
2. 블럭의 문장을 수행하고 다시 조건식으로 돌아간다.
for문과 while문 비교
- while문이 간결하다고 해서 무조건 while문만 쓰면 안된다. 만약에 증감식이 필요한 경우라면 while문보단, for문이 더 간결하며, 증감식이 필요없는 경우에만 while문이 간결하다.
while문의 조건식은 생략불가
- while문의 조건식은 생략할 수 없다. 항상 참이되게 조건식에 true를 반드시 줘야한다.
while () {}
while (true) {}
무한 반복문은 반드시 블럭 안에 조건문을 넣어서 특정 조건을 만족하면 무한 반복문을 벗어나도록 해야한다.
do-while문
- do-while문은 while문의 변형으로 기본적인 구조는 while문과 같으나 조건식과 블럭의 순서를 바꿔놓은 구조이다.
- while문은 조건에 따라 한번도 수행을 안 할 수 있지만 do-while문은 적어도 1번은 수행된다.
- 그리 많이 쓰이는 구조는 아니지만 알아만 두자.
break문
- 반목문일때 특정 조건 반복 중지를 할 수 있다.
- 자신이 포함된 가장 가까운 반복문을 벗어난다.
- 감싸고 있는 블록의 제어를 빠져나오는 기능이 있으며, 반복문, 조건문, switch문등과 같이 쓰이며, 현재 수행하고 있던 블록에서 수행중지후 외부로 제어가 이동한다.
continue문
- continue문은 반복문 내에서만 사용될 수 있으며, 반복이 진행되는 도중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.
- 쉽게 말해 반복의 수행 중 조건문과 조건이 맞는 경우 이후 블록내부의 다른 수행문을 수행하지 않음
이름 붙은 반복문
- break문은 근접한 단 하나의 반복문만 벗어 날수 있기 때문에, 여러개의 반복문이 중첩 된 경우 break문으로 중첩 반복문을 벗어나지 못한다. 이때 반복문 앞에 이름을 붙여서 특정 반복문을 벗어 날 수 있다.