본문 바로가기

JAVA

[Snack Java] 10. 자바의 반복문 (FOR문, 향상된 FOR문)

이전글 보기

2022.06.05 - [JAVA] - [Snack Java] 9. 자바의 조건문 (SWITCH문)

 

[Snack Java] 9. 자바의 조건문 (SWITCH문)

이전 글 보기 2022.06.05 - [JAVA] - [Snack Java] 8. 자바의 조건문 (If문) [Snack Java] 8. 자바의 조건문 (If문) 이전 글 보기 2022.06.05 - [JAVA] - [Snack Java] 7. 자바의 콘솔 입력(Console Input) [Snack..

yunjuniverse.tistory.com

 

 

 

이번에는 자바의 제어문 중 반복문입니다. 반복한다는건 다르게 말해 순회한다고 할 수 있습니다. 아직 배우진 않았지만 데이터를 집합처럼 다루는 배열이나 리스트에서 각 데이터를 하나씩 순회하며 데이터를 제어할 때 매우 유용하게 쓰이는게 반복문이죠. 그 중에서 순회 횟수가 정해져 있는 경우 자주 쓰이는 FOR문을 알아봅시다. 

 

FOR문

FOR문은 조건식이 참인 동안 주어진 횟수만큼 실행문을 반복적으로 수행합니다. 형태를 확인해 보겠습니다.

반복을 위해 필요한 요소를 for 키워드 매개변수 안에 넣어주는 형태입니다. 총 3가지 식을 넣어주어야 합니다. 초기화식, 조건식, 증감식인데요 각각의 식 뒤에는 세미콜론으로 끝났다는 것을 알려줘야 합니다. 다만 증감식은 마지막에 위치해 있기 때문에 넣어주지 않습니다. (일반적으로 반복 요소는 i로 쓰고 있습니다. 반복을 뜻하는 iteration의 약자죠.)

 

아주 간단한 for문의 예제를 한번 봅시다.

 

public class ForExample {
    public static void main(String[] args) {
        for(int i = 0; i < 10; i++){
            System.out.println("Yunjuniverse");
        }
    }
}

/*
Yunjuniverse
Yunjuniverse
Yunjuniverse
Yunjuniverse
Yunjuniverse
Yunjuniverse
Yunjuniverse
Yunjuniverse
Yunjuniverse
Yunjuniverse
*/

 

FOR문으로 반복을 0~9까지 총 10번의 반복을 하라고 정의했습니다. 그러자 출력 명령이 총 10번 실행이 되었네요. 이번에는 1에서 10까지의 합을 반복문으로 구해보겠습니다.

 

public class ForExample {
    public static void main(String[] args) {
        //합을 담을 변수 선언 및 초깃값 할당
        int sum = 0;
        //1부터 10까지 1씩 더하면서 반복합니다.
        for(int i = 1; i <=10; i++){
            //이전에 더해진 값에 다음 값을 더합니다.
            sum = sum + i;
        }
        System.out.println(sum);
    }
}

//출력값: 55

 

FOR문은 이런 식으로 반복적인 연산이 가능합니다. 때로는 필요에 의해 반복 요소를 따로 변수로서 정의해주는 경우도 있습니다. 이런 경우는 굳이 반복요소의 초깃값이 필요가 없습니다. 또한 증감식도 실행문 안에 넣어주면 증감식도 생략 가능합니다. 

 

두 요소를 생략한 예제를 보겠습니다.

public class ForExample {
    public static void main(String[] args) {
        //합을 담을 변수 선언 및 초깃값 할당
        int sum = 0;
        //순회할 숫자를 담은 변수 선언 및 초깃값 할당
        int num = 1;
        //순회할 숫자를 10까지 반복합니다.
        for(; num <=10;){
            //이전에 더해진 값에 다음 값을 더합니다.
            sum = sum + num;
            //숫자를 1씩 더하며 순회 합니다 num++를 풀어썼습니다.
            num = num + 1;
        }
        System.out.println(sum);
    }
}

 

이번 FOR문에는 조건식 밖에 안남았군요. 그러나 위에서 보듯이 초기화식을 생략할 때도 세미콜론은 남아있습니다.

 

그런데 조금 이상해보이는 부분이 있습니다. 이전에 매개변수는 쉼표로 구분해 줬는데 여기서는 세미콜론으로 구분을 하는군요.

 

FOR문의 각 식 부분(초기화식, 조건식, 증감식)은 하나의 선언문만 들어갈 수 있는 것이 아니라 여러 선언문이 들어갈 수 있습니다. 여러 선언문을 구분할 때 쉼표를 사용하고, 해당 여러 선언문으로 구성된 식이 끝나면 세미콜론으로 구분합니다. 예제를 보면서 이해를 해보겠습니다.

 

public class ForExample {
    public static void main(String[] args) {
    //i는 1부터 9까지, j는 10부터 1까지 각 선언문은 쉼표로 구분되어있습니다.
        for(int i = 1, j = 10; i <10 || j > 0; i++, j--){
        	//i와 j의 곱을 순차적으로 result에 담습니다.
            int result = i*j;
            //결과값 콘솔 출력
            System.out.printf("%d 곱하기 %d 의 답은 %d입니다.%n", i, j, result);
        }
    }
}

/*
출력값:
1 곱하기 10 의 답은 10입니다.
2 곱하기 9 의 답은 18입니다.
3 곱하기 8 의 답은 24입니다.
4 곱하기 7 의 답은 28입니다.
5 곱하기 6 의 답은 30입니다.
6 곱하기 5 의 답은 30입니다.
7 곱하기 4 의 답은 28입니다.
8 곱하기 3 의 답은 24입니다.
9 곱하기 2 의 답은 18입니다.
10 곱하기 1 의 답은 10입니다.
*/

 

이렇게 식 안에 여러 선언문을 넣을 수도 있습니다. 마지막으로 반복요소의 조건이나 증감식을 지정해줄 필요가 없는 향상된 FOR문(enhanced for문)에 대해 알아보죠

 

향상된 FOR문 (enhanced-for)

향상된 For문은 자바의 배열(Array), 컬렉션(Collection)과 연관이 있는 반복문입니다. 이 두 타입은 데이터 객체를 집합형태로 보유하고 있습니다. 향상된 FOR문을 이용하면 배열이나 컬렉션의 각 객체를 자동으로 순회할 수 있습니다. 따라서 반복실행을 하기 위해 반복요소 초기화와 증감식도 필요 없습니다. 다음 예시를 통해 향상된 FOR문을 조금 더 살펴보죠.

 

public class ForExample {
    public static void main(String[] args) {
    //문자열 배열입니다. 감자, 고구마, 옥수수가 차례로 들어가 있습니다.
        String[] vegetables = {"감자", "고구마", "옥수수"};
        // 향상된 for문으로 vegetables의 각 요소를 v로 정의하고 v를 자동으로 순회합니다.
        for(String v : vegetables) {
            System.out.println(v + "를 먹었습니다.");
        }
    }
}

/*
감자를 먹었습니다.
고구마를 먹었습니다.
옥수수를 먹었습니다.
*/

 

이렇게 향상된 FOR문은 배열을 자동으로 순회합니다. 배열은 어차피 개수가 정해져 있습니다. 처음과 끝이 정해져 있다는 뜻이죠. 증감량도 각 객체의 크기와 같습니다. 이런 경우 증감식이나 초깃값을 굳이 적어줄 필요가 없는 것이죠. 그저 해당하는 배열의 각 요소를 하나의 변수로 정의해주고 순회하기만 하면 됩니다. 형태를 정리해보면 다음과 같습니다.

 

 

지금까지 FOR문에 대해 알아보았습니다. 다음으로는 WHILE과 DO WHILE문에 대해 알아보죠.