프로그래밍 언어/자바

자바 9. 반복문

닉네임못짓는사람 2020. 8. 13. 13:36
반응형

 

이번 글에선 반복문에 대해서 알아보도록 합시다.

 

프로그래밍 언어에서 반복문은 조건문과 마찬가지로 정말 필수적인 요소입니다.

만약 여러분이 특정한 데이터, 또는 문자열을 여러번 출력하려면 어떻게 하실 건가요?

public class example{
    public static void main(String[] args){
        System.out.print("자바 9. 반복문");
        System.out.print("자바 9. 반복문");
        System.out.print("자바 9. 반복문");
        System.out.print("자바 9. 반복문");
        System.out.print("자바 9. 반복문");
    }
}

당장은 이렇게 하면 원하는 문자열을 5번 출력할 수 있을 것입니다.

하지만 이것이 5번이 아닌 100번, 1000번, 그보다 더 많아진다면 이렇게 할 순 없겠죠?

때문에 우리는 반복문을 사용해서 이러한 작업을 할 수 있도록 하는 겁니다.

반복문에는 for문과 while문이 있는데, 먼저 for문에 대해서 알아보도록 합시다.

for문


for문의 기본구조는 다음과 같습니다.

for(초기화식; 조건식; 증감식){
	실행코드
}

for문은 크게 4구역으로 나뉘어있으며, 실행 순서는

초기화식 -> 조건식 -> 실행코드 -> 증감식 -> 조건식 -> 실행코드 -> 증감식 ...

이를 반복문이 끝날 때까지 계속해서 반복합니다.

 

초기화식이란 주로 반복문 내에서 반복 횟수를 제어할 제어변수를 초기화해주는 식입니다.

조건식이란 이 반복문을 수행시키기 위해 true여야 하는 특정한 조건입니다.

마지막으로 조건식은 주로 제어변수의 값을 증감시켜주는 식인데, 주로 증감 연산자를 사용합니다.

그럼 간단한 예제를 통해서 for문의 사용법을 알아보도록 합시다.

public class example{
    public static void main(String[] args){
        for(int i = 0; i < 10; i++){
            System.out.print("자바 9. 반복문\n");
        }
    }
}

위와 같이 반복문을 사용하면 최초로 변수 i를 선언과 동시에 0으로 초기화하고,

조건식을 검사해서 i가 10보다 작으면 블럭 내의 코드를 실행합니다.

그 후 증감식에 따라 변수의 값을 증가시키고, 다시 조건식을 반복하는 부분부터 계속 반복합니다.

이런 과정을 반복해서 i가 10이 됐을 때 i < 10이란 조건이 false가 되기 때문에

반복문은 끝이 되고, 반복문은 총 10번 반복된 결과를 얻게 됩니다.

 

이렇게 반복문을 사용해서 우리가 위에서 똑같은 코드를 여러 번 작성해야 했던 작업을

매우 간단하게 해결할 수 있었습니다. 반복문을 사용하실 때 주의해야 할 점은

위와 같이 반복문 내에서 int i와 같이 변수를 선언하게 되면, 해당 변수는 반복문내에서만 사용 가능합니다.

따라서 반복문을 벗어난 다른 코드에선 변수 i를 사용할 수 없다는 이야기입니다.

중첩 for문


if문을 중첩해서 사용했던 것처럼 for문 또한 중첩해서 사용할 수 있습니다.

이때 총 반복 횟수는 내부 for문 반복수 * 외부 for문 반복수가 되겠죠?

이를 사용해서 간단한 예제를 풀어보도록 합시다.

public class example{
    public static void main(String[] args){
        int i, j;
        for(i = 1; i < 10; i++){
            for(j = 1; j < 10; j++){
                System.out.print(i + " * " + j + " = " + i*j + "||");
            }
            System.out.print("\n");
        }
    }
}

해당 예제는 중첩 for문을 사용해서 구구단을 출력하는 아주 간단한 예제입니다.

하나 알아두셔야 할 점은 반복문을 사용할 때 제어변수는 보통 암묵적인 룰로서

i, j, k의 순서로 이름을 붙입니다. 물론 꼭 지켜야 할 필요는 없습니다.

for문의 기본적인 사용법을 알아봤으니 다음은 while문에 대해서 알아보도록 합시다.

while문


while문의 기본적인 구조는 다음과 같습니다.

 while(조건식){
	실행코드
}

구조는 for문보다 훨씬 간결한데, 조건식과 실행할 코드블럭만 가지고 있습니다.

이런 형태에서 반복을 어떻게 하느냐? while문 외부에서 제어변수를 선언하고, 실행블럭 내에서

이 제어변수값을 증감시켜주는 식으로 for문과 동일하게 동작시킬 수 있습니다.

때문에 for문과 while문은 항상 서로 변환이 가능합니다.

int i = 0;
while(i < 10){
	실행코드
	i++;
}

하지만 저는 이런 카운터 형식의 코드에서는 while문보다 for문을 더 낫다고 생각합니다.

그럼 while문은 어떤 때 사용하느냐? 보통 for문은 카운터를 사용한 반복에서 사용하고,

while문은 조건식에 따른 반복이 필요할 때 주로 사용합니다.

코드로 예를 들어봅시다.

public class example{
    public static void main(String[] args){
        int sum = 0, num;
        while (sum <= 50){
            num = (int)(Math.random() * 10)+1;
            sum += num;
            System.out.print("sum + " + num + "\n");
        }
        System.out.print("sum = " + sum);
    }
}

위의 코드는 Math.random()을 사용해 sum에 1~10중 임의의 숫자를 더하는데,

이를 while문을 사용해 sum의 값이 50을 넘을 때까지 계속합니다.

이렇게 조건식만으로 반복횟수가 결정되고, 제어변수가 없을 경우에 보통 while문을 사용합니다.

다음은 이 while문의 변형인 do-while문에 대해서 알아보도록 하겠습니다.

do-while문


do-while문의 경우 기본적인 구조는 while문과 비슷합니다. 하지만 다른 점은

while문의 경우 조건이 false이면 당연히 실행코드를 단 한 번도 실행하지 않을 수도 있습니다.

반면, do-while문의 경우 조건이 false더라도 최초의 한 번은 무조건 실행코드를 실행합니다.

do-while문의 기본 구조는 다음과 같습니다.

do{
	실행코드
}while(조건식);

do-while문의 경우엔 실행블럭이 do뒤에 위치한다는 차이점이 있습니다.

그럼 에제를 통해서 사용법을 알아봅시다.

public class example{
    public static void main(String[] args){
        do{
            System.out.print("자바 9. 반복문");
        }while(false);
    }
}

예제를 보시면 while문의 조건이 대놓고 false인데도 불구하고 출력이 실행된 것을 볼 수 있습니다.

이렇게 반복문들의 기본적인 구조와 사용법들을 알아봤습니다.

그러면 다음엔 이 반복문들을 좀 더 유연하게 사용하는 방법에 대해서 알아봅시다.

break, continue문


break문의 경우 switch에서 이미 한 번 보셨는데, 이 break문이 실행될 경우

이와 가장 가까운 switch문 또는 반복문을 벗어납니다.

주로 if문과 함께 사용되어 특정 조건을 만족하면 반복문을 벗어나도록 합니다.

예제를 통해서 사용법을 알아봅시다.

public class example{
    public static void main(String[] args){
        int sum = 0, num = 0;
        while (true){
            num = (int)(Math.random() * 10)+1;
            sum += num;
            System.out.print("sum + " + num + "\n");
            if(sum > 50){
                break;
            }
        }
        System.out.print("sum = " + sum);
    }
}

해당 예제는 위에서 while문을 설명할 때 사용한 예제를 변형한 것입니다.

이번엔 while문의 조건을 true로 지정해 무한 반복문을 만들었습니다.

하지만 실행 코드 내에서 if문을 사용해 sum이 50을 넘으면 break으로 while문을 빠져나가게 했습니다.

이렇게 break문을 사용해 원하는 때에 반복문을 종료시킬 수 있습니다.

 

continue의 경우 break문과 비슷하면서도 다른데, continue는 현재 반복만 종료한다는 점입니다.

이게 무슨 말이냐 하면, break문의 경우엔 실행 시 반복문을 완전히 벗어나는데,

continue의 경우 실행시 현재 블럭의 실행을 종료하고 다음 반복으로 넘어갑니다.

예제를 통해서 사용법을 알아봅시다.

public class example{
    public static void main(String[] args){
        int i;
        for(i = 0; i < 10; i++){
            System.out.print("자바 9.");
            if(i >= 5){
                continue;
            }
            System.out.print(" 반복문\n");
        }
    }
}

예제를 보시면 반복문을 정상적으로 수행하다가, i가 5이상이 되는 시점부턴

" 반복문"을 출력하는 코드는 전혀 실행되지 않은 것을 볼 수 있습니다.

continue의 경우 switch문에서 사용은 불가하고, 반복문에서만 사용 가능합니다.

이름 붙은 반복문


break문과 continue의 경우 기본적으로 자신이 포함되어 있는 반복문을 종료하기 때문에,

중첩 반복문 같은 경우에는 바깥쪽에 있는 반복문을 종료할 수 없습니다.

하지만 이때 반복문에 이름을 붙이면 두 명령어로 바깥쪽에 있는 반복문을 제어할 수 있습니다.

public class example{
    public static void main(String[] args){
        int i, j;
        Loop1 : for(i = 0; i < 10; i++){
            for(j = 0; j < 10; j++){
                System.out.print("자바 9. 반복문\n");
                if(j == 5){
                    break Loop1;
                }
            }
        }
    }
}

위의 반복문은 원래 10*10, 100번이 수행되었어야 정상이지만, 바깥쪽 for문에 Loop1이란 이름을 붙이고,

j가 5가 되는 시점에 break을 사용해서 Loop1 반복문을 종료시켰기 때문에, 반복문이

총 6회만 반복된 것을 볼 수 있습니다. 이때 Loop1과 같은 이름을 라벨이라고 이야기합니다.

이렇게 break, continue, 라벨 등을 사용해서 반복문을 더 유연하게 사용할 수 있습니다.

 

이상으로 반복문에 대한 설명을 마치고, 다음엔 배열에 대해서 알아보도록 하겠습니다.

감사합니다.

반응형

'프로그래밍 언어 > 자바' 카테고리의 다른 글

자바 11. 배열-2  (0) 2020.08.24
자바 10. 배열-1  (0) 2020.08.14
자바 8. 조건문  (0) 2020.08.12
자바 7. 연산자-2  (0) 2020.08.11
자바 6. 연산자-1  (0) 2020.08.10