본문 바로가기
Tutorial/Java

자바(Java)의 반복문(Loop): for문, while문, do-while문 예시를 통해 차이점 이해하기

by CLJ 2024. 6. 4.

자바(Java)의 반복문(Loop)인 for, while, do-while 루프에 대해 자세히 알아보겠습니다. 서로 비슷하지만 상황에 따라 적절하게 사용하기 위해 어떠한 차이가 있는지 하나씩 살펴보겠습니다. 

 

1. For문 : 명확한 반복 횟수를 위한 선택

 

for 문은 자바에서 반복문을 사용하는 가장 기본적인 형태로, 반복 횟수가 명확할 때 주로 사용됩니다. 이 문법은 초기화, 조건식, 증감식을 한 줄에 작성할 수 있어 간결하고 효율적으로 반복을 제어할 수 있습니다.

For 문의 기본 구조

for (초기화; 조건식; 증감식) {
    // 반복 실행될 코드 블록
}

 

초기화: 반복이 시작될 때 한 번만 실행됩니다. 보통 반복 변수의 초기값을 설정합니다.

조건식: 각 반복마다 조건식이 참이면 반복문이 실행됩니다. 거짓이 되면 반복이 종료됩니다.

증감식: 각 반복이 끝날 때마다 실행되어 반복 변수를 업데이트합니다.

 

예제 코드

 

다음은 for 문의 사용 예제입니다. 이 코드는 변수 i를 0으로 초기화하고, i가 5보다 작을 동안 반복하며, 각 반복 후 i를 1씩 증가시킵니다.

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

 

이 예제에서 for 문은 5번 반복됩니다. 각 반복마다 "Iteration: "과 함께 현재 반복 변수 i의 값이 출력됩니다. 따라서 출력 결과는 다음과 같습니다:

Iteration: 0
Iteration: 1
Iteration: 2
Iteration: 3
Iteration: 4

 

for 문 반복 횟수가 명확히 정의되므로 코드를 읽고 이해하기 쉽습니다. 초기화, 조건식, 증감식을 한 줄에 작성할 수 있어 코드가 간결해집니다. 반복 변수를 for 문 내부에 선언하면, 반복문이 끝난 후 해당 변수는 더 이상 유효하지 않아 변수 범위를 제한할 수 있습니다.

 

중첩된 For 문

 

for 문은 중첩해서 사용할 수도 있습니다. 다음 예제는 2중 for 문을 사용하여 구구단을 출력하는 코드입니다:

public class NestedForExample {
    public static void main(String[] args) {
        for (int i = 2; i <= 9; i++) {
            for (int j = 1; j <= 9; j++) {
                System.out.println(i + " * " + j + " = " + (i * j));
            }
            System.out.println(); // 각 단마다 줄바꿈
        }
    }
}

 

이 코드에서는 바깥쪽 for 문이 2부터 9까지의 숫자를 반복하고, 안쪽 for 문이 1부터 9까지의 숫자를 반복하여 각 단의 곱셈 결과를 출력합니다.

 

2. While 문: 조건이 참인 동안 반복

 

while 문은 자바에서 조건식이 참인 동안 반복을 계속 실행하는 구조를 갖는 반복문입니다. 반복 횟수가 명확하지 않거나 동적으로 결정될 때 주로 사용됩니다. while 문은 조건이 참일 경우에만 코드 블록을 실행하므로, 특정 조건이 충족될 때까지 반복 작업을 수행하는 데 적합합니다.

While 문의 기본 구조

while (조건식) {
    // 반복 실행될 코드 블록
}

 

조건식: 반복문이 실행될 조건을 정의합니다. 조건식이 참(true)일 경우에만 코드 블록이 실행됩니다.

코드 블록: 조건식이 참인 동안 반복적으로 실행되는 코드입니다.

 

예제 코드

 

다음은 while 문을 사용하는 간단한 예제입니다. 이 코드는 counter 변수가 5보다 작을 동안 "Counter: "와 함께 현재 counter의 값을 출력합니다.

public class WhileExample {
    public static void main(String[] args) {
        int counter = 0;

        while (counter < 5) {
            System.out.println("Counter: " + counter);
            counter++;
        }
    }
}

 

이 예제에서 while 문은 조건식 counter < 5가 참인 동안 반복됩니다. 각 반복마다 counter의 값이 1씩 증가하며, 그 값이 출력됩니다. 출력 결과는 다음과 같습니다.

Counter: 0
Counter: 1
Counter: 2
Counter: 3
Counter: 4

 

while 문은 반복 횟수가 사전에 명확하지 않을 때 유용합니다. 조건식에 따라 동적으로 반복을 제어할 수 있습니다. 조건식이 참인 동안만 실행되므로, 반복 조건을 명확하게 이해할 수 있습니다. 반복 중 특정 조건을 만나면 반복을 중단하거나 건너뛸 수 있는 유연한 제어가 가능합니다.

 

무한 루프 주의

 

while 문을 사용할 때는 무한 루프에 빠지지 않도록 주의해야 합니다. 무한 루프는 조건식이 항상 참일 경우 발생하며, 프로그램이 종료되지 않고 계속 실행됩니다. 예를 들어, 다음 코드는 무한 루프의 예입니다:

public class InfiniteLoopExample {
    public static void main(String[] args) {
        int counter = 0;

        while (true) {
            System.out.println("Counter: " + counter);
            counter++;
        }
    }
}

 

이 코드는 조건식이 항상 참(true)인 상태이므로, 무한히 실행됩니다. 이러한 문제를 방지하려면 적절한 종료 조건을 설정해야 합니다.

 

예제: 사용자 입력에 따라 반복

 

다음은 사용자가 입력한 값을 기반으로 반복을 제어하는 예제입니다. 사용자가 'exit'을 입력할 때까지 반복적으로 값을 입력받습니다.

import java.util.Scanner;

public class UserInputExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = "";

        while (!input.equals("exit")) {
            System.out.print("Enter command: ");
            input = scanner.nextLine();
            System.out.println("You entered: " + input);
        }

        scanner.close();
        System.out.println("Program exited.");
    }
}

 

사용자가 'exit'을 입력할 때까지 반복적으로 값을 입력받고, 입력받은 값을 출력합니다. 사용자가 'exit'을 입력하면 while 문이 종료되고 프로그램이 종료됩니다.

 

3. Do-While 문: 최소 한 번의 실행 보장

 

do-while 문은 자바에서 조건식이 참일 때까지 반복을 실행하는 반복문입니다. while 문과 유사하지만, do-while 문은 반복문이 조건을 평가하기 전에 코드 블록을 최소 한 번 실행한다는 점에서 차이가 있습니다. 이로 인해, do-while 문은 특정 코드 블록이 최소 한 번은 실행되어야 하는 경우에 유용합니다.

 

Do-While 문의 기본 구조

do {
    // 반복 실행될 코드 블록
} while (조건식);

코드 블록: 조건식이 평가되기 전에 최소 한 번 실행됩니다.

조건식: 코드 블록이 실행된 후 평가되며, 조건식이 참일 경우 반복이 계속됩니다.

 

예제 코드

 

다음은 do-while 문을 사용하는 간단한 예제입니다. 이 코드는 count 변수가 5보다 작을 동안 "Count: "와 함께 현재 count의 값을 출력합니다.

public class DoWhileExample {
    public static void main(String[] args) {
        int count = 0;

        do {
            System.out.println("Count: " + count);
            count++;
        } while (count < 5);
    }
}

 

이 예제에서 do-while 문은 count가 5보다 작을 동안 반복됩니다. 각 반복마다 count의 값이 1씩 증가하며, 그 값이 출력됩니다. 출력 결과는 다음과 같습니다.

Count: 0
Count: 1
Count: 2
Count: 3
Count: 4

 

do-while 문은 조건식 평가 전에 코드 블록이 실행되므로, 조건이 거짓이어도 코드 블록이 최소 한 번은 실행됩니다. 코드 블록을 먼저 실행하고 조건을 나중에 평가하기 때문에, 코드의 흐름을 쉽게 파악할 수 있습니다. 반복 조건이 반복문 내에서 결정되는 경우에 유용합니다.

 

예제: 사용자 입력 기반 반복

 

위의 while문에서 사용한 예제를 do~while문으로 적용하면 다음과 같습니다. 이 예제에서는 최소 한 번은 사용자 입력을 받아야 하기 때문에 do-while 문이 적합합니다.

import java.util.Scanner;

public class UserInputExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input;

        do {
            System.out.print("Enter command: ");
            input = scanner.nextLine();
            System.out.println("You entered: " + input);
        } while (!input.equals("exit"));

        scanner.close();
        System.out.println("Program exited.");
    }
}

 

이 코드는 사용자가 'exit'을 입력할 때까지 반복적으로 값을 입력받고, 입력받은 값을 출력합니다. 사용자가 'exit'을 입력하면 do-while 문이 종료되고 프로그램이 종료됩니다.

 

무한 루프 주의

 

do-while 문을 사용할 때도 무한 루프에 주의해야 합니다. 조건식이 항상 참일 경우, 반복문은 끝나지 않고 계속 실행됩니다. 다음은 무한 루프의 예입니다:

public class InfiniteLoopExample {
    public static void main(String[] args) {
        int count = 0;

        do {
            System.out.println("Count: " + count);
            count++;
        } while (true);
    }
}

 

이 코드는 조건식이 항상 참(true)이므로, 무한히 실행됩니다. 적절한 종료 조건을 설정하여 무한 루프를 방지해야 합니다.

 

4. 반복문 사용 시 주의사항

 

반복문을 잘못 사용하면 성능 저하, 무한 루프 등 여러 가지 문제가 발생할 수 있습니다. 반복문을 올바르게 사용하기 위해 다음과 같은 주의사항을 지켜야 합니다.

 

1. 무한 루프 피하기

가장 주의해야 할 점은 무한 루프입니다. 조건식이 항상 참일 경우 반복문이 끝나지 않고 계속 실행됩니다. 이는 프로그램을 멈추게 하거나 컴퓨터 자원을 고갈시킬 수 있습니다. 적절한 종료 조건을 설정하는 것이 중요합니다.

public class InfiniteLoopExample {
    public static void main(String[] args) {
        int counter = 0;

        while (true) {
            System.out.println("Counter: " + counter);
            counter++;
        }
    }
}

 

위 코드는 무한 루프의 예입니다. 조건식이 항상 참이기 때문에, 반복문이 끝나지 않습니다. 이를 방지하려면 종료 조건을 명확히 설정해야 합니다.

 

2. 조건식의 정확성

 

조건식이 정확해야 합니다. 조건식이 부정확하면 의도하지 않은 횟수만큼 반복되거나, 반복문이 실행되지 않을 수 있습니다. 조건식을 신중하게 작성하여 원하는 조건에서만 반복되도록 해야 합니다.

 

public class ConditionExample {
    public static void main(String[] args) {
        int counter = 10;

        while (counter > 0) {
            System.out.println("Counter: " + counter);
            counter--;
        }
    }
}

 

이 코드는 counter가 0보다 클 때만 반복하므로, 10번만 반복됩니다.

 

3. 반복문의 복잡도 관리

 

중첩된 반복문을 사용할 때는 복잡도가 급격히 증가할 수 있습니다. 복잡도가 높아지면 코드의 가독성이 떨어지고, 성능 문제가 발생할 수 있습니다. 가능한 한 중첩된 반복문을 최소화하고, 필요할 경우 함수를 사용하여 코드를 분리하는 것이 좋습니다.

 

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

 

이 예제는 10x10, 즉 100번 반복됩니다. 중첩된 반복문이 필요할 경우, 성능에 미치는 영향을 고려해야 합니다.

 

4. 반복문 내 변수 초기화

 

반복문 내에서 변수를 초기화하는 경우, 반복마다 변수 초기화가 수행되어 성능이 저하될 수 있습니다. 가능한 경우 반복문 외부에서 변수를 초기화하고, 반복문 내부에서는 필요에 따라 값을 변경하는 것이 좋습니다.

 

public class VariableInitializationExample {
    public static void main(String[] args) {
        int sum = 0;

        for (int i = 0; i < 10; i++) {
            sum += i;
        }

        System.out.println("Sum: " + sum);
    }
}

 

이 예제에서 sum 변수를 반복문 외부에서 초기화하여 불필요한 초기화를 피했습니다.

 

5. Break와 Continue의 사용

 

반복문을 제어하기 위해 break와 continue를 사용할 수 있습니다. break는 반복문을 즉시 종료하고, continue는 현재 반복을 건너뛰고 다음 반복을 실행합니다. 이들을 적절히 사용하여 반복문을 효율적으로 제어할 수 있습니다.

public class BreakContinueExample {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i == 5) {
                continue; // 5일 때 건너뜀
            }
            if (i == 8) {
                break; // 8일 때 반복문 종료
            }
            System.out.println("i: " + i);
        }
    }
}

 

이 예제에서 i가 5일 때는 출력하지 않고, 다음 반복을 실행합니다. i가 8일 때는 반복문을 종료합니다.

 

요약

 

이번 글에서는 자바에서 반복문을 사용하는 방법에 대해 알아보았습니다.

 

for문은 반복 횟수가 명확할 때 사용하기에 적합한 반복문으로, 간결하고 명확한 코드 작성에 도움을 줍니다. 초기화, 조건식, 증감식을 한 줄에 작성할 수 있어 코드의 가독성을 높일 수 있으며, 중첩된 for 문을 사용하여 더 복잡한 반복 작업도 수행할 수 있습니다.

 

while문은 반복 횟수가 사전에 명확하지 않을 때 유용한 반복문입니다. 조건식이 참인 동안 반복을 계속 실행하며, 유연하게 반복 조건을 설정할 수 있습니다. 그러나 무한 루프에 빠지지 않도록 적절한 종료 조건을 설정하는 것이 중요합니다. 이러한 특성 덕분에 동적인 반복 작업을 수행하는 데 매우 유용한 도구입니다.

 

do-while문은 조건식이 참일 때까지 반복을 실행하며, 최소 한 번은 코드 블록을 실행하는 특성을 갖고 있습니다. 이로 인해, 조건이 처음부터 거짓이어도 코드 블록이 한 번은 실행되어야 하는 경우에 매우 유용합니다. 반복 조건을 명확히 설정하고, 무한 루프를 피하기 위한 적절한 종료 조건을 마련하는 것이 중요합니다. 이러한 특성 덕분에 do-while 문은 자바 프로그래밍에서 중요한 반복문 중 하나로 활용됩니다.

 

반복문을 사용할 때는 무한 루프를 피하고, 조건식을 정확히 작성하며, 반복문의 복잡도를 관리하는 것이 중요합니다. 또한, 반복문 내 변수 초기화를 신중히 하고, break와 continue를 적절히 사용하여 반복문을 효율적으로 제어해야 합니다. 이러한 주의사항을 준수하면 반복문을 안전하고 효과적으로 사용할 수 있습니다.

 

2024.06.01 - [Java] - 자바(Java) if, else, switch 사용 방법, 주의 사항

 

자바(Java) if, else, switch 사용 방법 , 주의 사항

자바에서 조건문은 프로그램의 흐름을 제어하는 일을 하기 때문에 반드시 이해하고 사용할 줄 알아야 합니다.  이 글에서는 if, else, 그리고 switch 문을 사용하는 방법과 각 조건문의 특성에 대해

it-learner.tistory.com

 

2024.06.16 - [Java] - 자바의 연산자: 산술, 비교, 논리 연산자 이해하기

 

자바의 연산자: 산술, 비교, 논리 연산자 이해하기

프로그래밍 언어에서 연산자는 변수와 값에 대한 연산을 수행하는 데 사용되는 기호입니다. 연산자는 코드 내에서 다양한 작업을 수행하는 데 필수적인 요소로, 산술 연산자부터 비교 연산자,

it-learner.tistory.com