Java_06) Loop - 반복문
2025. 8. 26. 08:53

 

  • 반복문의 개념과 필요성 이해
  • for문의 구조와 활용 방법
  • while문과 do-while문의 차이점 파악
  • break와 continue를 활용한 반복 제어
  • 다양한 반복문 예제를 통한 실습

반복문이란?

반복문은 특정 코드를 여러 번 반복해서 실행하고자 할 때 사용하는 제어문이다. 같은 코드를 여러 번 작성하는 대신 반복문을 사용하여 효율적으로 프로그래밍할 수 있다.

반복문의 종류:

  • for문: 반복 횟수가 명확할 때 주로 사용
  • while문: 조건에 따른 반복 실행
  • do-while문: 최소 한 번은 실행 후 조건 검사

    <for문>

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

구성 요소:

  • 초기식: 반복을 시작하기 전 변수를 선언하고 초기값 설정, 처음 딱 한 번만 실행
  • 조건식: 반복을 계속 진행할지 여부를 판단하는 조건, true면 반복 진행/false면 반복 종료
  • 증감식: 매번 반복이 끝난 후 변수값을 증가/감소시키는 식

기본 for문 예제

package com.kh.loop;

public class For {
    public static void main(String[] args) {
        // "안녕하세요"를 10번 출력
        for(int i = 0; i < 10; i++) {
            System.out.println("안녕하세요");
        }
        
        // 1부터 5까지 순차적으로 출력
        for(int i = 1; i <= 5; i++) {
            System.out.print(i + " ");
        }
    }
}

실행 결과:

안녕하세요
안녕하세요
...
안녕하세요
1 2 3 4 5 

    Java의 지역변수와 블록 scope

Java의 지역변수는 특정 메서드나 블록({}) 내부에서 선언되며, 선언된 블록 범위 내에서만 접근이 가능하다. 해당 블록이 종료되면 블록 내부의 변수도 함께 소멸된다.

for문 활용 예제들

홀수만 출력하기

// 1~10 숫자 중 홀수만 출력
for(int i = 1; i <= 10; i++) {
    if(i % 2 == 1) {
        System.out.print(i + " ");
    }
}

짝수의 합 구하기

// 1~100 숫자 중 짝수의 합을 출력
int sum = 0;
for(int i = 1; i <= 100; i++) {
    if(i % 2 == 0) {
        sum += i;
    }
}
System.out.println("1~100 숫자 중 짝수의 합: " + sum);

Math.random() 활용하기

Math.random() 함수:

  • java.lang.Math 클래스에서 기본적으로 제공하는 함수
  • 호출 시 0.0~0.999999999999 사이의 랜덤값을 반환
  • 랜덤 수 생성 공식: (int)(Math.random()*(최댓값 + 1 - 최솟값)) + 최솟값
// 1~10 사이의 랜덤 수 생성 후 1부터 해당 수까지의 합 구하기
int num = (int)(Math.random() * 10) + 1;
int sum = 0;

for(int i = 1; i <= num; i++) {
    sum += i;
}

System.out.println("random 수: " + num);
System.out.println("1~" + num + "까지의 더한 값: " + sum);

문자열 처리하기

// 문자열의 각 문자를 개별적으로 출력
String str = "Hello";
for(int i = 0; i < str.length(); i++) {
    System.out.print(str.charAt(i) + " ");
}

// 사용자 입력 문자열의 짝수 자리 글자만 출력
Scanner sc = new Scanner(System.in);
System.out.print("문자열 입력: ");
String input = sc.next();

for(int i = 0; i < input.length(); i++) {
    if(i % 2 == 1) {  // 인덱스가 홀수인 경우 (실제로는 짝수 번째 문자)
        System.out.print(input.charAt(i));
    }
}

중첩 for문으로 구구단 출력

// 2단부터 9단까지 모든 구구단 출력
for(int i = 2; i <= 9; i++) {
    for(int j = 1; j <= 9; j++) {
        System.out.println(i + " x " + j + " = " + (i * j));
    }
}

 

    <while문>

while(조건식) {
    반복할 코드
    [탈출이 가능한 구조]
}

while문은 조건식이 true인 동안 계속해서 반복 실행하며, false가 되면 반복을 종료한다.

while문 기본 예제

package com.kh.loop;

import java.util.Scanner;

public class While {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // 기본 while문 예제
        int i = 0;
        while(i < 10) {
            System.out.println("안녕하세요");
            i++;
        }
        
        // 사용자가 0을 입력할 때까지 입력받아 출력
        int n = sc.nextInt();
        while(n != 0) {
            System.out.println(n);
            n = sc.nextInt();
        }
    }
}

while문 활용 예제

랜덤 수 합계 계산

// 사용자가 0을 입력할 때까지 랜덤값(1~100)을 생성하여 합계 계산
int n = sc.nextInt();
int sum = 0;

while(n != 0) {
    int num = (int)(Math.random() * 100) + 1;
    sum += num;
    System.out.println("생성된 랜덤 수: " + num);
    n = sc.nextInt();
}

System.out.println("모두 더한 값: " + sum);

메뉴 선택 시스템

// 서비스 메뉴 시스템
int num;

System.out.println("서비스 번호를 입력하세요.");
System.out.println("1. 추가");
System.out.println("2. 삭제");
System.out.println("3. 종료");

num = sc.nextInt();
while(num != 3) {
    switch(num) {
        case 1:
            System.out.println("추가 완료");
            break;
        case 2:
            System.out.println("삭제 완료");
            break;
        default:
            System.out.println("잘못된 입력");
    }
    
    System.out.println("서비스 번호를 입력하세요.");
    num = sc.nextInt();
}

    <do-while문>

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

do-while문의 핵심:

  • 처음에 무조건 실행코드를 한 번 실행한 후 조건식을 검사
  • 기존의 for/while은 처음 수행될 때 조건검사 후 true일 경우에만 반복코드를 실행
  • do-while은 첫 실행은 조건검사 없이 무조건 실행

do-while문 예제

package com.kh.loop;

import java.util.Scanner;

public class DoWhile {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // 사용자가 원하는 수를 계속해서 더하는 프로그램
        // 사용자가 0을 입력하면 종료
        int inputNum, sum = 0;
        
        do {
            System.out.print("숫자 입력: ");
            inputNum = sc.nextInt();
            sum += inputNum;
        } while(inputNum != 0);
        
        System.out.println("결과: " + sum);
    }
}

실행 결과:

숫자 입력: 5
숫자 입력: 3
숫자 입력: 2
숫자 입력: 0
결과: 10

    <break와 continue>

    break문

break; // 가장 가까운 반복문 또는 switch문을 탈출

break문이 실행되는 순간 가장 가까운 반복문 또는 switch문을 탈출한다.

break문 예제

package com.kh.loop;

public class Break {
    public static void main(String[] args) {
        // 랜덤값(1~100)을 발생시켜 출력
        // 단, 랜덤값이 3의 배수일 경우 반복문 종료
        while(true) {
            int num = (int)(Math.random() * 100) + 1;
            System.out.println(num);
            
            if(num % 3 == 0) {
                System.out.println("3의 배수 발견! 종료");
                break;
            }
        }
        
        // 로또번호 추첨 - 1~45까지 중 랜덤하게 6개 추출
        for(int i = 0; ; i++) {
            int num = (int)(Math.random() * 45) + 1;
            System.out.print(num + " ");
            
            if(i >= 5) {
                break;
            }
        }
    }
}

문자열 입력 프로그램

// 사용자에게 문자열을 입력받아 해당 문자열의 길이를 출력
// 단, 사용자가 "exit"를 입력할 때까지 반복
Scanner sc = new Scanner(System.in);
String str;

while(true) {
    System.out.print("문자열 입력: ");
    str = sc.next();
    
    if(str.toLowerCase().equals("exit")) {
        System.out.println("프로그램을 종료한다.");
        break;
    }
    
    System.out.println("길이: " + str.length());
}

    continue문

continue; // 그 뒤의 코드를 실행하지 않고 다시 반복문의 맨 위로 이동

continue 코드를 실행시 그 뒤의 코드를 실행하지 않고 다시 반복문의 맨 위로 이동하여 반복문을 진행한다.

continue문 예제

package com.kh.loop;

public class Continue {
    public static void main(String[] args) {
        // 1부터 50까지의 숫자 중 5의 배수만 출력
        for(int i = 1; i <= 50; i++) {
            if(i % 5 != 0) {
                continue; // 5의 배수가 아니면 아래 코드를 건너뛰고 다음 반복으로
            }
            System.out.print(i + " ");
        }
    }
}

실행 결과:

5 10 15 20 25 30 35 40 45 50

예제 1: 커피 주문 키오스크

Scanner sc = new Scanner(System.in);

System.out.print("아메리카노를 몇 잔 구매하시겠습니까? (1100원): ");
int quantity = sc.nextInt();

int totalPrice = 0;
for(int i = 0; i < quantity; i++) {
    totalPrice += 1100;
}

System.out.printf("결제하실 금액 %d원입니다.\n", totalPrice);

예제 2: 구구단 출력

// 특정 단의 구구단 출력
int dan = 2;
for(int i = 1; i <= 9; i++) {
    System.out.println(dan + " x " + i + " = " + (dan * i));
}

예제 3: 문자열 분석

// 문자열의 각 문자를 인덱스와 함께 출력
String text = "Hello";
System.out.println("문자열: " + text);
System.out.println("길이: " + text.length());

for(int i = 0; i < text.length(); i++) {
    System.out.println("인덱스 " + i + ": " + text.charAt(i));
}

    for문 vs while문 vs do-while문 언제 사용?

for문을 사용하는 경우

  • 반복 횟수가 명확할 때
  • 카운터 변수가 필요할 때
  • 배열이나 컬렉션을 순회할 때

while문을 사용하는 경우

  • 조건에 따른 반복이 필요할 때
  • 반복 횟수를 미리 알 수 없을
  • 사용자 입력에 따른 반복 처리

do-while문을 사용하는 경우

  • 최소 한 번은 실행되어야 할 때
  • 메뉴 시스템이나 게임 루프 구현 시

    <정리 및 요약>

for문:

  • 반복 횟수가 명확할 때 사용
  • 초기식, 조건식, 증감식의 구조
  • 카운터 변수를 활용한 제어

while문:

  • 조건에 따른 반복 실행
  • 탈출 조건을 명확히 설정해야 함
  • 무한루프 주의 필요

do-while문:

  • 최소 한 번은 실행 보장
  • 실행 후 조건 검사
  • 메뉴 시스템 구현에 적합

제어문:

  • break: 반복문 완전 탈출
  • continue: 현재 반복 건너뛰기

'Java' 카테고리의 다른 글

Java_08) 다차원 배열  (6) 2025.08.26
Java_07) array - 배열  (1) 2025.08.26
Java_05) Control - 조건문(제어문)  (1) 2025.08.26
Java_04 ) Operator 연산자  (0) 2025.08.21
Java_03 ) Type Conversion - 형변환  (1) 2025.08.20