반복문 하면 떠오르는 for 반복문이다.
자바의 for문은 기본은 C언어와 같기 때문에 C언어를 배운 사람은 쉽게 적응할 수 있다.
for(초기화; 조건식; 카운터 증감){
코드;
}
첫인상은 그리 친절하지 않다. 실행 순서를 정리해야 하기때문이다.
1) 초기화 : 처음 한번 실행한다.
2) 조건식 : 참과 거짓(true or false)을 반환한다.
3) 코드 : 조건식이 true 일 경우 실행된다.
4) 카운터 증감 : 카운터를 증감한다.
2) 조건식 : 증감된 카운터로 다시 조건식을 검사한다.
3) 코드 : 조건식이 true 일 경우 실행된다.
4) 카운터 증감 : 카운터를 증감한다.
2) 조건식 : 다시 조건식으로 돌아간다.
1,2,3,4 후 2,3,4가 반복된다.
<예제>
int count; // 카운터 변수
int sum = 0; // 합계 구할 변수
for(count = 1; count <= 10; count++)
{
sum = sum + count;
}
System.out.println("합계 : " + sum);
for 문의 괄호 ( ) 안에 들어있는 내용에 익숙해지면 매우 직관적이지만 처음에는 코드를 읽으며 하나씩 순서를 살펴보는게 도움이 된다.
for(count = 1; count <= 10; count++)
이 문장은 매우 직관적이다. 초기화의 1에서 시작해서 조건식의 10까지 count를 1씩 증가시키는 코드이므로 결국 1부터 10까지 정수가 생성될 것이고 괄호 { } 안에서 실행되는 내용에 영향을 미칠 것이다. count가 10일때 { }를 실행시키고 그 다음에 증가된 count++ 는 11이다. count <= 10 이 거짓이 되므로 for 루프는 종료하게 된다.
한 마디로 1부터 10까지 1의 간격으로 루프를 돌린다.
다음과 같이 증가식을 변형시킬 수도 있다.
for(count = 1; count <= 10; count+=2) // 카운터가 2의 간격으로 증가한다.
{
sum = sum + count;
}
카운터가 1,3,5,7,9 일때 실행되므로 총합은 25이다.
초기화도 for문 안에서 가능하다.
for (int i = 1; i <= 10; i++){
System.out.println(i); // 1부터 10까지 출력
}
문법이 간결하고 직관적이기 때문에 for문을 많이 쓴다.
반복문 안에 반복문을 넣는 것을 중첩이라고 한다.(nested)
for문을 두개 사용해서 구구단을 출력하는 코드를 만들어보자. 구구단은 중첩된 반복문을 사용하는 고전이다. 기왕 만들것이니 19단 예제를 만들어 보자. 우선 바깥쪽의 for문과 안쪽의 for 문의 동작원리를 보자.
for(int i = 2; i <=19; i++){
for(int j=1; j<=19; j++){
System.out.println(i + " X " + j + " = " + (i*j));
}
System.out.println("=================");
}
바깥쪽 for가 한바퀴 돌때 안쪽 for는 19바퀴를 돈다. 바깥쪽 카운터는 i, 안쪽 카운터는 j 이다. for문에서 선언과 동시에 초기화를 하면 안쪽 for문 j는 매번 지역변수로 새로 생성된다. (j를 안쪽 for문 바깥에서는 사용불가능하다)
사실 for문도 처음에 이해하는 단계에서는 하나씩 뜯어볼 필요가 있다. 늘 그럴 필요는 없지만 프로그램을 이해하는데는 for문의 코드들을 하나씩 대입하며 결과값을 확인하면 도움이 된다. 마치 디버그 하는 것 처럼 하나씩 값을 추적해보면 반복문의 제어와 순서에 대하여 잘 이해할 수 있다.
여기까지 자바의 while, do while, for에 대하여 살펴봤다. 이 세가지 반복문으로 똑같은 기능을 하는 코드를 만들 수 있을 것이다. 어느 문법을 쓰는게 좋은가? 상황에 따라 적절하게 선택해 사용하면 된다. 단순한 반복문은 for 문이 간결하며 직관적이고, do while 은 { } 코드를 한번은 실행해야 할 때 사용한다. 그냥 while은 무한루프 프로그램에 사용할 수 있다. 쓰고자 하는 코드의 특성에 따라 상황에 맞게 선택하면 된다.
* 추가사항 : 향상된 for문과 배열
향상된 for문으로 쓰는 방식이 있어 소개한다.
public class FreeTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] arg = {"a","b","c"};
for(String str1 : arg) {
System.out.println(str1);
}
}
}
for 문을 보면 arg 배열의 순서대로 반복한다. 첫번째 실행시 "a", "b", "c" 의 순서로 꺼내서 String 변수 str1에 대입한다.
a
b
c
를 반복한다. for문을 쓰는 향상된 방식이다.