본문 바로가기
  • 코딩, 허쌤이 떠먹여 줄게
BackEnd/Java

4장. 제어문

by 허쌤 2025. 12. 30.

4장. 제어문

제어문이란?

제어문(Control Statement)은 프로그램의 실행 흐름을 제어하는 문장입니다. 조건에 따라 다른 코드를 실행하거나, 특정 코드를 반복 실행할 수 있게 해줍니다.

제어문의 종류

  1. 조건문: 조건에 따라 코드를 선택적으로 실행
    • if, if-else, switch
  2. 반복문: 조건이 만족되는 동안 코드를 반복 실행
    • for, while, do-while
  3. 분기문: 반복문의 흐름을 제어
    • break, continue

조건문 (Conditional Statements)

if 문

가장 기본적인 조건문으로, 조건이 true일 때만 코드를 실행합니다.

기본 형식

if (조건식) {
    // 조건이 true일 때 실행할 코드
}

예제

int score = 85;

if (score >= 60) {
    System.out.println("합격입니다!");
}

if-else 문

조건이 true일 때와 false일 때 각각 다른 코드를 실행합니다.

기본 형식

if (조건식) {
    // 조건이 true일 때 실행할 코드
} else {
    // 조건이 false일 때 실행할 코드
}

예제

int age = 20;

if (age >= 18) {
    System.out.println("성인입니다.");
} else {
    System.out.println("미성년자입니다.");
}

if-else if-else 문

여러 조건을 순차적으로 확인할 수 있습니다.

기본 형식

if (조건식1) {
    // 조건식1이 true일 때 실행
} else if (조건식2) {
    // 조건식1이 false이고 조건식2가 true일 때 실행
} else if (조건식3) {
    // 조건식1, 2가 false이고 조건식3이 true일 때 실행
} else {
    // 모든 조건이 false일 때 실행
}

예제

int score = 85;

if (score >= 90) {
    System.out.println("A등급");
} else if (score >= 80) {
    System.out.println("B등급");
} else if (score >= 70) {
    System.out.println("C등급");
} else if (score >= 60) {
    System.out.println("D등급");
} else {
    System.out.println("F등급");
}

중첩 if 문

if 문 안에 또 다른 if 문을 사용할 수 있습니다.

int age = 20;
boolean hasLicense = true;

if (age >= 18) {
    if (hasLicense) {
        System.out.println("운전 가능합니다.");
    } else {
        System.out.println("면허가 필요합니다.");
    }
} else {
    System.out.println("미성년자는 운전할 수 없습니다.");
}

삼항 연산자 (Ternary Operator)

간단한 if-else 문을 한 줄로 표현할 수 있습니다.

// 형식: 조건식 ? 값1 : 값2
// 조건식이 true이면 값1, false이면 값2

int age = 20;
String status = (age >= 18) ? "성인" : "미성년자";
System.out.println(status);  // "성인"

switch 문

여러 조건 중 하나를 선택하여 실행할 때 사용합니다. if-else if-else를 더 간결하게 표현할 수 있습니다.

기본 형식

switch (변수) {
    case 값1:
        // 변수가 값1일 때 실행
        break;
    case 값2:
        // 변수가 값2일 때 실행
        break;
    case 값3:
        // 변수가 값3일 때 실행
        break;
    default:
        // 모든 case에 해당하지 않을 때 실행
        break;
}

예제

int day = 3;
String dayName;

switch (day) {
    case 1:
        dayName = "월요일";
        break;
    case 2:
        dayName = "화요일";
        break;
    case 3:
        dayName = "수요일";
        break;
    case 4:
        dayName = "목요일";
        break;
    case 5:
        dayName = "금요일";
        break;
    case 6:
        dayName = "토요일";
        break;
    case 7:
        dayName = "일요일";
        break;
    default:
        dayName = "잘못된 요일";
        break;
}

System.out.println(dayName);  // "수요일"

break 문의 중요성

break 문이 없으면 다음 case도 계속 실행됩니다 (fall-through).

int num = 2;

switch (num) {
    case 1:
        System.out.println("1");
        // break가 없으면 다음 case도 실행됨
    case 2:
        System.out.println("2");
        // break가 없으면 다음 case도 실행됨
    case 3:
        System.out.println("3");
        break;
    default:
        System.out.println("기타");
}

// 출력: 2, 3 (break가 없어서 case 3도 실행됨)

여러 case를 하나로 묶기

의도적으로 break를 생략하여 여러 case를 같은 코드로 처리할 수 있습니다.

char grade = 'B';

switch (grade) {
    case 'A':
    case 'a':
        System.out.println("우수");
        break;
    case 'B':
    case 'b':
        System.out.println("양호");
        break;
    case 'C':
    case 'c':
        System.out.println("보통");
        break;
    default:
        System.out.println("기타");
        break;
}

switch 표현식 (Java 14+)

Java 14부터는 switch 표현식을 사용할 수 있습니다.

int day = 3;
String dayName = switch (day) {
    case 1 -> "월요일";
    case 2 -> "화요일";
    case 3 -> "수요일";
    case 4 -> "목요일";
    case 5 -> "금요일";
    case 6 -> "토요일";
    case 7 -> "일요일";
    default -> "잘못된 요일";
};

반복문 (Loop Statements)

for 문

반복 횟수를 알고 있을 때 주로 사용합니다.

기본 형식

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

실행 순서

  1. 초기화 실행 (한 번만)
  2. 조건식 확인
  3. 조건이 true이면 코드 블록 실행
  4. 증감식 실행
  5. 2번으로 돌아가 반복

예제

// 1부터 10까지 출력
for (int i = 1; i <= 10; i++) {
    System.out.println(i);
}

// 10부터 1까지 출력
for (int i = 10; i >= 1; i--) {
    System.out.println(i);
}

// 2씩 증가
for (int i = 0; i <= 10; i += 2) {
    System.out.println(i);  // 0, 2, 4, 6, 8, 10
}

while 문

조건이 true인 동안 계속 반복합니다. 반복 횟수를 모를 때 주로 사용합니다.

기본 형식

while (조건식) {
    // 조건이 true인 동안 반복 실행할 코드
}

예제

int i = 1;

while (i <= 10) {
    System.out.println(i);
    i++;  // 증감식을 직접 작성해야 함
}

// 무한 루프 (주의!)
// while (true) {
//     System.out.println("무한 반복");
// }

do-while 문

조건을 나중에 확인하므로, 최소 한 번은 실행됩니다.

기본 형식

do {
    // 최소 한 번은 실행할 코드
} while (조건식);

예제

int i = 1;

do {
    System.out.println(i);
    i++;
} while (i <= 10);

// 조건이 false여도 한 번은 실행됨
int j = 10;
do {
    System.out.println(j);  // 10 출력
    j++;
} while (j < 5);  // 조건이 false이지만 한 번은 실행됨

for vs while vs do-while

반복문 특징 사용 시기
for 반복 횟수를 알고 있을 때 배열 순회, 특정 횟수 반복
while 조건만 확인, 0번 이상 실행 조건 기반 반복, 횟수 불명확
do-while 조건을 나중에 확인, 1번 이상 실행 최소 한 번은 실행해야 할 때

중첩 제어문 (Nested Control Statements)

제어문 안에 또 다른 제어문을 사용할 수 있습니다.

중첩 if 문

int score = 85;
String grade;

if (score >= 90) {
    if (score >= 95) {
        grade = "A+";
    } else {
        grade = "A";
    }
} else if (score >= 80) {
    grade = "B";
} else {
    grade = "C";
}

중첩 반복문

반복문 안에 반복문을 사용할 수 있습니다. 주로 2차원 배열이나 구구단 같은 패턴을 만들 때 사용합니다.

예제: 구구단

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

예제: 별 찍기

// 직각삼각형
for (int i = 1; i <= 5; i++) {
    for (int j = 1; j <= i; j++) {
        System.out.print("*");
    }
    System.out.println();
}

// 출력:
// *
// **
// ***
// ****
// *****

중첩 제어문의 주의사항

  • 너무 깊은 중첩은 코드 가독성을 떨어뜨립니다 (일반적으로 3단계 이상은 피하는 것이 좋음)
  • 각 제어문의 범위를 명확히 구분해야 합니다

break 문

break 문은 반복문이나 switch 문을 즉시 종료합니다.

switch 문에서의 break

switch (num) {
    case 1:
        System.out.println("1");
        break;  // switch 문 종료
    case 2:
        System.out.println("2");
        break;
    default:
        System.out.println("기타");
        break;
}

반복문에서의 break

가장 가까운 반복문 하나만 종료합니다.

// 1부터 10까지 출력하되, 5가 되면 종료
for (int i = 1; i <= 10; i++) {
    if (i == 5) {
        break;  // 반복문 종료
    }
    System.out.println(i);
}
// 출력: 1, 2, 3, 4

// 중첩 반복문에서 break
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 3; j++) {
        if (j == 2) {
            break;  // 안쪽 for 문만 종료
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}
// 출력:
// i=1, j=1
// i=2, j=1
// i=3, j=1

레이블과 함께 사용하는 break

중첩 반복문에서 특정 반복문을 종료하려면 레이블을 사용합니다.

outer: for (int i = 1; i <= 3; i++) {
    inner: for (int j = 1; j <= 3; j++) {
        if (j == 2) {
            break outer;  // outer 레이블의 반복문 종료
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}
// 출력: i=1, j=1 (outer 반복문이 종료됨)

continue 문

continue 문은 현재 반복을 건너뛰고 다음 반복을 계속합니다.

기본 사용법

// 1부터 10까지 출력하되, 5는 건너뛰기
for (int i = 1; i <= 10; i++) {
    if (i == 5) {
        continue;  // 현재 반복 건너뛰고 다음 반복 계속
    }
    System.out.println(i);
}
// 출력: 1, 2, 3, 4, 6, 7, 8, 9, 10

// 짝수만 출력
for (int i = 1; i <= 10; i++) {
    if (i % 2 != 0) {
        continue;  // 홀수는 건너뛰기
    }
    System.out.println(i);
}
// 출력: 2, 4, 6, 8, 10

while 문에서의 continue

int i = 0;
while (i < 10) {
    i++;
    if (i % 2 == 0) {
        continue;  // 짝수는 건너뛰기
    }
    System.out.println(i);
}
// 출력: 1, 3, 5, 7, 9

주의: while 문에서 continue를 사용할 때는 무한 루프에 빠지지 않도록 주의해야 합니다.

int i = 0;
while (i < 10) {
    if (i % 2 == 0) {
        continue;  // i가 증가하지 않아 무한 루프!
    }
    System.out.println(i);
    i++;
}

레이블과 함께 사용하는 continue

중첩 반복문에서 특정 반복문의 다음 반복으로 건너뛸 수 있습니다.

outer: for (int i = 1; i <= 3; i++) {
    inner: for (int j = 1; j <= 3; j++) {
        if (j == 2) {
            continue outer;  // outer의 다음 반복으로
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}
// 출력:
// i=1, j=1
// i=2, j=1
// i=3, j=1

제어문 종합 예제

public class ControlStatementExample {
    public static void main(String[] args) {
        // 1. 조건문 예제
        int score = 85;
        if (score >= 90) {
            System.out.println("A등급");
        } else if (score >= 80) {
            System.out.println("B등급");
        } else {
            System.out.println("C등급 이하");
        }

        // 2. 반복문 예제
        System.out.println("\n1부터 10까지:");
        for (int i = 1; i <= 10; i++) {
            System.out.print(i + " ");
        }

        // 3. 중첩 반복문 예제
        System.out.println("\n\n구구단 2단:");
        for (int i = 1; i <= 9; i++) {
            System.out.println("2 × " + i + " = " + (2 * i));
        }

        // 4. break 예제
        System.out.println("\n5에서 멈춤:");
        for (int i = 1; i <= 10; i++) {
            if (i == 5) {
                break;
            }
            System.out.print(i + " ");
        }

        // 5. continue 예제
        System.out.println("\n\n짝수만 출력:");
        for (int i = 1; i <= 10; i++) {
            if (i % 2 != 0) {
                continue;
            }
            System.out.print(i + " ");
        }
    }
}

연습 문제

  1. 조건문

    • 나이를 입력받아 성인/미성년자를 판단하고, 성인이면 운전 가능 여부를 확인하는 프로그램을 작성하세요.
  2. switch 문

    • 월(1~12)을 입력받아 해당하는 계절을 출력하는 프로그램을 작성하세요.
  3. 반복문

    • 1부터 100까지의 합을 계산하는 프로그램을 작성하세요 (for, while, do-while 각각 사용).
  4. 중첩 반복문

    • 구구단 전체(2단~9단)를 출력하는 프로그램을 작성하세요.
  5. break와 continue

    • 1부터 100까지의 수 중에서 3의 배수만 출력하되, 50을 넘으면 종료하는 프로그램을 작성하세요.

다음 장 예고

다음 장에서는 배열(Array)을 사용하여 여러 데이터를 효율적으로 관리하는 방법을 학습합니다.

'BackEnd > Java' 카테고리의 다른 글

6장. 메서드(Method)  (0) 2025.12.31
5장. 배열과 문자열  (0) 2025.12.30
3장. 연산자  (0) 2025.12.29
2장. 변수와 자료형  (0) 2025.12.28
1장. Java 시작하기  (0) 2025.12.26