'
본문 바로가기
study/Programming

[JAVA 기초] 제어문 - 분기문

by meowdule 2025. 4. 30.

 

1. 분기문이란?


📌 분기문

자바에서 분기문은 프로그램의 실행 흐름을 중간에 멈추거나, 건너뛰거나, 빠져나오게 하는 명령어를 말합니다.

분기문은 단순히 반복을 "멈춘다"거나 "건너뛴다"는 개념을 넘어서,
실제 프로그램 로직을 유연하게 제어하는 핵심 도구입니다.

쉽게 말해, "코드의 흐름을 제어하는 문장"이라고 생각하면 됩니다.

 

반복문은 기본적으로 조건을 만족하는 동안 계속해서 실행됩니다.
그런데 실무에서는 조건을 만족하더라도 특정 상황에서는 반복을 멈추거나 건너뛰어야 할 필요가 있습니다.

분기문은 반복이나 조건의 흐름을 세밀하게 조정하기 위해 사용됩니다.

 

 

📌 분기문 사용법

분기문의 사용 위치

 

  • if 조건문 내부
  • for, while, do-while 반복문 내부
  • switch 조건문 내부

대표적인 분기문

  • break: 반복문이나 switch문을 즉시 종료
  • continue: 반복문의 이번 회차만 건너뛰고, 다음 회차로 이동
  • return: 메서드 실행을 종료하고 값을 반환하거나 단순히 종료만 함 (자세한 내용은 이후 게시글에서 다룹니다)

 

상황 사용 분기문 설명
반복을 완전히 중단해야 할 때 break "종료" 입력 시
이번 회차만 건너뛰고 반복은 유지할 때 continue 빈 입력 시
메소드 자체를 빠져나올 때 return (메소드 종료 시)

 

 

 

 

 

 

 

2. break 문


📌 break 문이란?

break는 반복문(for, while, do-while)이나 switch문에서 사용되는 흐름 제어문입니다.
특정 조건이 되면 반복을 중단하고, 그 블록 바깥으로 빠져나갑니다.

if (조건) {
    break;
}
 

💡 반복문의 조건이 true여도 break를 만나면 반복이 종료됩니다.

 

break는 자신이 속한 반복문 한 개만 종료합니다.
즉, 중첩 반복문 안에서 사용되면, 가장 가까운 반복문만 멈춥니다.

 

그렇기 때문에 전체 반복을 빠져나오고 싶을 때는 label: 문법을 사용합니다.

 


📌 break 문 사용 상황

반복문은 조건이 만족되는 동안 계속 실행되지만, 특정 조건에서 즉시 반복을 끝내야 하는 경우가 있습니다.

예시 상황:

  • 사용자에게 입력을 받는 중 "종료"라는 단어가 입력되면 즉시 반복 중지
  • 조건문으로는 멈출 수 없는 무한 루프 처리
  • 중첩 반복문 중 내부 반복만 종료가 아닌 전체 반복 종료

 

실습 예제

더보기

1. 무한 루프 종료: while(true)에서 break 사용

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

        while (true) {
            sum += i;

            if (i == 100) {
                break; // i가 100이면 종료
            }

            i++;
        }

        System.out.println("1부터 100까지의 합: " + sum);
    }
}

 

실행 결과

1부터 100까지의 합: 5050

 

 

 

 

2. 구구단: 곱한 결과가 5보다 크면 중단

public class BreakInLoop {
    public static void main(String[] args) {
        for (int dan = 2; dan <= 9; dan++) {
            for (int su = 1; su <= 9; su++) {
                if (dan * su > 5) {
                    break; // 해당 단의 곱이 5보다 크면 중단
                }

                System.out.println(dan + " * " + su + " = " + (dan * su));
            }
            System.out.println();
        }
    }
}

 

실행 결과 (일부)

2 * 1 = 2
2 * 2 = 4

3 * 1 = 3

4 * 1 = 4

5 * 1 = 5

6 * 1 = 6

 

 

 

3. label을 이용한 중첩 반복문 완전 종료

public class BreakWithLabel {
    public static void main(String[] args) {
        outer: // label 이름 지정
        for (;;) {
            for (int i = 0; i < 10; i++) {
                System.out.println("i: " + i);
                if (i == 3) {
                    break outer; // 전체 반복문 종료
                }
            }
        }
        System.out.println("모든 반복문 종료");
    }
}

 

실행 결과

i: 0
i: 1
i: 2
i: 3
모든 반복문 종료

 

 

 

 

 

 

 

3. continue 문


📌 continue 문이란?

continue는 반복문 안에서 현재 반복을 건너뛰고 다음 반복으로 이동하게 하는 분기문입니다

 

  • 반복 중 특정 조건에서는 작업을 하지 않고 넘어가고 싶을 때
  • 예외적인 상황을 제외하고 나머지 흐름을 유지하고 싶을 때
  • 주로 if문과 함께 사용

 

 
if (조건) {
    continue;
}

💡 continue를 만나면 아래 코드를 실행하지 않고 바로 증감식(또는 조건식)으로 이동합니다.

 

 


📌 중첩 반복문에서의 주의점

continue도 기본적으로 자신이 포함된 반복문 하나에만 영향을 줍니다.

 

즉, 중첩 반복문에서는 가장 가까운 반복문의 다음 반복으로 넘어갑니다.
→ 모든 반복을 건너뛰고 싶을 땐 label:과 함께 사용합니다.

 

 

실습 예제

더보기

1. 1~100 중 4와 5의 공배수만 출력

public class ContinueTest {
    public static void main(String[] args) {
        for (int i = 1; i <= 100; i++) {
            if (!(i % 4 == 0 && i % 5 == 0)) {
                continue; // 공배수가 아니면 건너뜀
            }
            System.out.println(i);
        }
    }
}

 

실행 결과

20
40
60
80
100

 

 

 

2. 구구단 – 짝수 곱 생략

public class ContinueInGugudan {
    public static void main(String[] args) {
        for (int dan = 2; dan <= 9; dan++) {
            for (int su = 1; su <= 9; su++) {
                if (su % 2 == 0) {
                    continue; // 짝수는 건너뜀
                }
                System.out.println(dan + " * " + su + " = " + (dan * su));
            }
            System.out.println();
        }
    }
}

 

실행 결과 (일부)

2 * 1 = 2
2 * 3 = 6
2 * 5 = 10
...

3 * 1 = 3
3 * 3 = 9
3 * 5 = 15
...

 

 

 

 

3. label:로 반복 단위 건너뛰기

public class ContinueWithLabel {
    public static void main(String[] args) {
        outer: // label 지정
        for (int dan = 2; dan <= 9; dan++) {
            for (int su = 1; su <= 9; su++) {
                if (su % 2 == 0) {
                    continue outer; // 해당 단 전체 건너뜀
                }
                System.out.println(dan + " * " + su + " = " + dan * su);
            }
        }
    }
}

 

 실행결과

2 * 1 = 2
3 * 1 = 3
4 * 1 = 4
5 * 1 = 5
6 * 1 = 6
7 * 1 = 7
8 * 1 = 8
9 * 1 = 9

 

 

 

 

 

 

4. return 문


📌 return 문이란?

return은 메소드의 실행을 종료하고, 값을 반환하는 구문입니다.
메소드의 마지막 결과값을 호출한 쪽으로 전달할 수 있습니다.

  • 결과를 호출한 쪽에 전달하고 싶을 때
  • 조건에 따라 메소드 실행을 조기 종료하고 싶을 때
  • 불필요한 연산/출력을 막고자 할 때
int add(int a, int b) {
    return a + b; // a + b 값을 반환하며 메소드 종료
}
 

💡 메소드는 return을 만나면 그 즉시 종료됩니다. 이후의 코드는 실행되지 않습니다.

 

 

실습 예제

더보기

1. 성적 계산기: 유효하지 않은 점수는 무시하고 리턴

public class GradeCalculator {
    public static String getGrade(int score) {
        if (score < 0 || score > 100) {
            System.out.println("잘못된 점수입니다.");
            return "N/A";  // 유효 범위 외 점수는 'N/A' 반환
        }

        if (score >= 90) return "A";
        if (score >= 80) return "B";
        if (score >= 70) return "C";
        if (score >= 60) return "D";
        return "F";
    }

    public static void main(String[] args) {
        System.out.println("Score 95: " + getGrade(95));
        System.out.println("Score 77: " + getGrade(77));
        System.out.println("Score -10: " + getGrade(-10));
    }
}

 

실행 결과

Score 95: A
Score 77: C
잘못된 점수입니다.
Score -10: N/A

 

 

 

 

 

2. 조건 만족 시 즉시 반환

public class Checker {
    public static boolean isEven(int num) {
        if (num % 2 == 0) return true;
        return false;
    }

    public static void main(String[] args) {
        System.out.println("4는 짝수인가요? " + isEven(4));
        System.out.println("5는 짝수인가요? " + isEven(5));
    }
}

 

실행 결과

4는 짝수인가요? true
5는 짝수인가요? false

 

 

 

 

 

 

5. 분기문을 사용하다 생기는 오해들

 

분기문(break, continue, return)은 흐름 제어를 위해 꼭 필요한 기능입니다.

하지만 처음 자바를 배우다 보면 다음과 같은 오해를 자주 하게 됩니다:

  • break를 쓰면 모든 반복이 끝나는 줄 안다
  • continue는 증감식도 건너뛰는 줄 착각한다
  • return은 반복문을 종료한다고 생각한다

아래에서 각각의 상황을 예제와 함께 확인해보겠습니다.


📌 break는 모든 반복을 멈춘다?

break를 쓰면 중첩 반복문 전체가 종료될 거라 생각함

→ break는 가장 가까운 반복문(j) 하나만 종료합니다.
→ 중첩 반복 전체를 멈추려면 **label:**을 사용해야 합니다.

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

 


📌 continue를 쓰면 증감식도 스킵된다?

continue를 쓰면 증감식이 실행되지 않을 것 같음

  출력은 건너뛰지만, 증감식은 정상 수행

for (int i = 1; i <= 5; i++) {
    if (i == 3) {
        continue;
    }
    System.out.println("i = " + i);
}

 


📌 return을 쓰면 반복문이 끝난다?

return은 반복문만 빠져나오는 줄 앎

→ return은 반복문이 아니라 메소드 자체를 종료시킵니다.
→ main()에서 return을 만나면 전체 프로그램 종료입니다.

public static void main(String[] args) {
    for (int i = 1; i <= 5; i++) {
        if (i == 3) {
            return;
        }
        System.out.println("i = " + i);
    }
    System.out.println("반복 끝!");
}

 

 

 

 

 

마무리
다음 게시글에서는 배열 선언에 대해 학습하겠습니다.