코드 한 줄의 기록

Java 반복문 완벽 가이드: for·while·do-while 그리고 향상된 for 활용법 본문

JAVA

Java 반복문 완벽 가이드: for·while·do-while 그리고 향상된 for 활용법

CodeByJin 2025. 9. 26. 08:00
반응형

프로그래밍에서 반복문은 동일한 코드 블록을 여러 번 실행하고자 할 때 꼭 필요한 구조입니다. Java에서는 전통적인 for, while, do-while 세 가지 반복문과, 컬렉션 순회 시 유용한 향상된 for(enhanced for)가 제공됩니다. 이 글에서는 제가 직접 실습하며 정리한 예제와 주의할 점을 바탕으로, 각 반복문의 특징과 활용법을 상세히 살펴보고자 합니다. Java 입문자부터 중급 개발자까지 두루 참고할 수 있는 내용으로 구성했습니다.

for문: 가장 기본이 되는 반복 구조

for문은 초기화 → 조건 검사 → 반복 작업 → 증감식 순서로 실행됩니다. 반복 횟수가 명확할 때 주로 사용하죠. 예를 들어 1부터 10까지 숫자를 더하는 코드를 보겠습니다.

int sum = 0;

for (int i = 1; i <= 10; i++) {

    sum += i;

}

System.out.println("1~10 합계: " + sum);

  • 초기화: int i = 1
  • 조건 검사: i <= 10
  • 증감식: i++

위 구조를 이용하면 인덱스 기반 반복에 최적화된 코드를 작성할 수 있습니다. 다만 무한 루프에 빠지지 않도록 증감식을 올바르게 설정해야 합니다.

다중 변수 활용하기

for문 초기화와 증감식에 변수 여러 개를 선언·수정할 수도 있습니다.

for (int i = 0, j = 10; i < j; i++, j--) {

    System.out.printf("i=%d, j=%d%n", i, j);

}

위 예제는 i는 0부터 증가, j는 10부터 감소하며 두 변수가 교차할 때까지 반복합니다. 코드 가독성을 위해 너무 복잡한 로직은 메서드로 분리하는 것이 좋습니다.

while문: 조건 중심 반복

while문은 조건이 참인 동안 반복 블록을 실행합니다. 반복 횟수를 미리 알기 어려울 때 적합하죠.

int n = 1;

while (n <= 5) {

    System.out.println("n = " + n);

    n++;

}

  • 반복이 시작되기 전 조건을 먼저 검사합니다.
  • 조건이 false가 되면 즉시 반복을 종료합니다.

주의: 초기화와 증감식 관리

while은 반복 횟수를 제어하는 변수를 직접 다뤄야 합니다. 초기값 설정과 증감식을 빼먹으면 무한 루프에 빠집니다.

int count = 0;

while (true) {

    System.out.println("count = " + count);

    if (count == 3) {

        break;  // 탈출 조건

    }

    count++;

}

break를 사용해 명시적으로 반복을 종료할 수 있습니다. 다만 남용 시 코드 흐름이 복잡해질 수 있으니 가급적 깔끔한 조건문으로 대체하세요.

do-while문: 최소 한 번 실행 보장

do-while문은 최소 한 번 반복 본문을 실행한 뒤 조건을 검사합니다.

int input;

Scanner scanner = new Scanner(System.in);

do {

    System.out.print("숫자를 입력하세요 (0 입력 시 종료): ");

    input = scanner.nextInt();

    System.out.println("입력한 값: " + input);

} while (input != 0);

scanner.close();

  • 사용자가 입력할 때처럼 최소 한 번 실행해야 하는 상황에 유용합니다.
  • 조건 검사 시점이 반복문 뒤에 위치합니다.

향상된 for문 (Enhanced for): 배열과 컬렉션 순회에 최적화

Java 5부터 지원된 향상된 for문은 배열과 Collection 프레임워크를 간결하게 순회합니다.

// 배열 순회

String[] fruits = { "사과", "바나나", "체리" };

for (String fruit : fruits) {

    System.out.println(fruit);

}

// 리스트 순회

List<Integer> scores = Arrays.asList(90, 80, 70);

for (int score : scores) {

    System.out.println("점수: " + score);

}

  • 장점: 인덱스 변수를 직접 관리할 필요 없이 요소를 간편하게 순회
  • 단점: 반복 중 컬렉션에 원소를 추가/삭제할 수 없음. (ConcurrentModificationException 주의)

만약 인덱스가 필요한 경우에는 전통적인 for문을 사용하거나 ListIterator를 활용하세요.

반복문 활용 팁과 모범 사례

  • 무한 루프 방지: 반복 조건과 증감식이 잘못 설계되면 프로그램이 멈춥니다. 항상 탈출 조건을 점검하세요.
  • 가독성 유지: 복잡한 반복 로직은 함수나 메서드로 분리해 책임을 분리합니다.
  • 컬렉션 수정 주의: for-each문 내에서 컬렉션을 수정하면 예외가 발생합니다. 안전하게 수정하려면 Iterator 사용을 고려하세요.
  • 병렬 처리: Java 8 이상에서는 StreamparallelStream()을 이용해 반복 작업을 병렬로 수행할 수 있습니다. 예시:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

names.parallelStream()

     .filter(name -> name.startsWith("A"))

     .forEach(System.out::println);

지금까지 for, while, do-while, 향상된 for까지 Java의 주요 반복문을 다뤄봤습니다. 각 반복문의 특징과 활용 사례를 정리하면 다음과 같습니다.

  • for문: 반복 횟수 명확, 인덱스 기반 처리
  • while문: 조건 중심, 반복 횟수 불명확 시 적합
  • do-while문: 최소 한 번 실행 보장
  • 향상된 for문: 배열/컬렉션 순회 간결

다음 단계로는 Java Stream APIforEach(), map(), filter() 등 함수형 반복 기법을 학습해 보세요. 반복문을 적절히 선택하고, 가독성과 유지보수성을 높이는 코딩 습관을 길러 효율적인 Java 개발자가 되어 보시기 바랍니다!

[완벽 가이드] Java 연산자 종류와 우선순위 총정리 – 산술·비트·논리·비교·삼항 연산자

Java 개발자라면 연산자(operator)를 자유자재로 다루는 것은 필수 역량입니다. 각 연산자의 특징과 우선순위(precedence)를 정확하게 이해해야 복잡한 식(expression)에서도 의도한 결과를 얻을 수 있습

byteandbit.tistory.com

반응형