본문 바로가기
프로그래밍/JAVA

초보 자바 프로그래밍(8) - 반복문 for

by 머니테크리더 2023. 5. 1.
반응형

반복문 for 대표 이미지
반복문 for 대표 이미지

🔖 INDEX

     

     

    자바 프로그래밍에서 for 반복문은 주로 반복 횟수가 정해져 있는 경우에 사용되는 제어문입니다. for 문은 초기화, 조건식, 증감식이 함께 사용되어 반복문의 시작, 종료, 증감 규칙을 한 곳에서 관리할 수 있어 가독성이 좋습니다

     

    for 문의 문법

    다음은 for 반복문의 기본 구조입니다.

    for (초기화; 조건식; 증감식) {
        // 실행할 코드
    }
    1. 초기화 (Initialization): for 문이 시작될 때 실행되는 구문으로, 주로 반복문을 제어하는 변수를 선언하고 초기값을 할당합니다. 초기화는 반복문이 시작될 때 한 번만 실행됩니다.
    2. 조건식 (Condition): 초기화 이후에 평가되는 논리 표현식으로, 이 조건식이 참인 경우에만 코드 블록이 실행됩니다. 조건식이 거짓이 되면 for 문이 종료되고 다음 코드 블록을 실행합니다.
    3. 증감식 (Iteration): 코드 블록의 실행이 완료된 후 실행되는 구문으로, 주로 반복을 제어하는 변수의 값을 증가시키거나 감소시키는 역할을 합니다. 증감식은 매 반복마다 실행됩니다.
    4. 코드 블록: 중괄호({})로 묶인 영역으로, 조건식이 참일 때 실행되는 코드들이 위치합니다.

     

    for 문의 예제 코드

    간단한 예제를 살펴봅시다.

    for (int i = 1; i <= 10; i++) {
        System.out.println("i: " + i);
    }

    이 예제에서는 초기화 부분에서 변수 i를 선언하고 1로 초기화했습니다. 조건식은 i <= 10으로, i의 값이 10 이하인 동안 반복문이 실행됩니다. 증감식에서는 i의 값을 1씩 증가시키며 반복을 진행합니다.

     

    for 문은 다양한 상황에서 사용됩니다. 예를 들어, 배열이나 컬렉션의 모든 요소에 대해 작업을 수행할 때 유용하게 사용할 수 있습니다.

    int[] numbers = {10, 20, 30, 40, 50};
    
    for (int i = 0; i < numbers.length; i++) {
        System.out.println("numbers[" + i + "] = " + numbers[i]);
    }

    자바 5부터는 for-each 문법을 사용하여 배열이나 컬렉션을 더 간편하게 반복할 수 있습니다.

    int[] numbers = {10, 20, 30, 40, 50};
    
    for (int number : numbers) {
        System.out.println("number = " + number);
    }

    for 문을 중첩하여 사용할 수도 있습니다. 이 경우, 바깥쪽 for 문의 반복에 따라 안쪽 for 문이 여러 번 실행됩니다.

    for (int i = 1; i <= 3; i++) {
        for (int j = 1; j <= 5; j++) {
            System.out.println("i: " + i + ", j: " + j);
        }
    }

    위 코드는 i가 1부터 3까지, j가 1부터 5까지 변경되며 출력되는 중첩된 for 문 예제입니다. 실행 결과는 다음과 같습니다.

    i: 1, j: 1
    i: 1, j: 2
    i: 1, j: 3
    i: 1, j: 4
    i: 1, j: 5
    i: 2, j: 1
    i: 2, j: 2
    i: 2, j: 3
    i: 2, j: 4
    i: 2, j: 5
    i: 3, j: 1
    i: 3, j: 2
    i: 3, j: 3
    i: 3, j: 4
    i: 3, j: 5

    중첩된 for 문은 행렬, 테이블 형태의 데이터를 처리하거나, 다차원 배열을 사용하는 경우 등에 활용할 수 있습니다. 하지만 중첩의 깊이가 너무 깊어지면 코드의 가독성과 성능에 영향을 미칠 수 있으므로, 적절한 수준의 중첩을 유지하는 것이 좋습니다.

     

     

    또한, for 문에서도 `break`와 `continue`를 사용하여 반복문의 흐름을 제어할 수 있습니다. `break`는 반복문을 완전히 종료하고, `continue`는 현재 반복을 건너뛰고 다음 반복을 시작합니다.

    // break 예시
    for (int i = 1; i <= 10; i++) {
        if (i > 5) {
            break;
        }
        System.out.println("i: " + i);
    }
    // 출력: 1, 2, 3, 4, 5
    
    // continue 예시
    for (int i = 1; i <= 10; i++) {
        if (i % 2 == 0) {
            continue;
        }
        System.out.println("i: " + i);
    }
    // 출력: 1, 3, 5, 7, 9

     

    사용 시 주의 사항

    자바 프로그래밍에서 for 반복문을 사용할 때 주의해야 할 몇 가지 점이 있습니다. while 반복문과 비슷한 주의점이 많지만, 다시 상기하는 의미에서 중복되는 부분들도 나열하겠습니다.

     

    1. 무한 루프 주의 : 반복문의 조건식을 잘못 작성하여 무한 루프에 빠질 가능성이 있습니다. 이렇게 되면 프로그램이 종료되지 않고 계속 실행되어 시스템 자원을 낭비하게 됩니다. 따라서 반복문의 조건식과 증감식을 항상 신중하게 작성하여 무한 루프에 빠지지 않도록 주의하세요.

    // 무한 루프 예시: i 값이 증가하지 않아 조건식이 항상 참이 됨
    for (int i = 0; i < 10;) {
        System.out.println("i: " + i);
        // i++; (이 줄이 누락되어 무한 루프 발생)
    }

     

     

    2. 배열 및 컬렉션의 인덱스 범위 : 배열이나 컬렉션을 순회할 때, 인덱스 범위를 벗어나지 않도록 주의하세요. 인덱스 범위를 벗어난 요소에 접근하려고 하면 'ArrayIndexOutOfBoundsException'이 발생합니다.

    int[] numbers = {1, 2, 3, 4, 5};
    
    for (int i = 0; i <= numbers.length; i++) { // i <= numbers.length 대신 i < numbers.length 사용
        System.out.println("numbers[" + i + "] = " + numbers[i]);
    }

     

    3. 중첩된 반복문의 성능 : 중첩된 반복문을 사용할 때, 반복의 깊이가 너무 깊어지면 성능에 영향을 미칠 수 있습니다. 따라서 중첩의 깊이를 최소화하고, 필요하다면 최적화 기법을 적용하여 성능을 향상시키세요.

     

    4. 변경되지 않는 값의 처리 : 반복문 내에서 값이 변경되지 않는 변수나 상수를 사용할 때, 성능 향상을 위해 미리 계산한 결과를 변수에 저장하거나 상수로 사용하는 것이 좋습니다.

    // 변경되지 않는 값의 처리 예시
    int constantValue = 10;
    int length = numbers.length; // length가 변하지 않는 값이므로 반복문 밖에서 한 번만 계산
    
    for (int i = 0; i < length; i++) {
        System.out.println("numbers[" + i + "] * constantValue = " + (numbers[i] * constantValue));
    }

     

    5. 코드 가독성: 반복문 내부에 복잡한 로직이 포함되어 있을 경우, 가독성을 위해 해당 로직을 별도의 메소드로 분리하는 것이 좋습니다.

     

    이러한 주의 사항을 고려하여 for 문을 활용하면 효과적인 프로그래밍을 할 수 있습니다.

     

     

    댓글