Java/Grammar

[Java] 제어 흐름 문 (Control Flow Statements)

annovation 2025. 4. 22. 23:41

if

💡else-if

  • if-then-else 구조는 여러 조건을 순차적으로 평가하며, 첫 번째로 true인 조건의 블록만 실행됩니다. 따라서 이후의 else if 조건들은 평가되지 않아 중복 체크를 피할 수 있습니다. 이는 효율적인 조건 분기 구조를 제공합니다.​ [각주:1]
The if-then-else statement provides a secondary path of execution when an 'if' clause evaluates to false.
  • 서로 독립적인 조건을 처리해야 할 경우, if-else 대신 별도의 if 문을 사용하는 것이 더 적절할 수 있습니다. 이는 각 조건이 서로 영향을 주지 않고 독립적으로 평가되도록 합니다.​

✅ 예제

int temp = 35;
boolean isRaining = true;
boolean isWindy = true;

if (temp > 30) {
    System.out.println("🔥 폭염주의 알림 발송");
}

if (isRaining) {
    System.out.println("☔ 우산 챙기세요 알림 발송");
}

if (isWindy) {
    System.out.println("💨 강풍주의 알림 발송");
}

switch

💡비교 연산자 사용 제한

  • switch 문은 주어진 표현식의 결과와 case 레이블의 값을 비교하여 일치하는 경우 해당 블록을 실행합니다. 이때, switch 문은 단순한 값의 일치만을 비교하며, if 문처럼 복잡한 비교 연산자나 조건식을 사용할 수 없습니다.​ [각주:2]
The switch statement evaluates its expression, then executes all statements that follow the matching case label.

 

💡break 문

  • switch 문에서 각 case 블록의 끝에 break 문을 사용하지 않으면, 다음 case 블록으로 실행이 이어지는 "fall-through" 현상이 발생합니다. 이는 의도치 않은 동작을 유발할 수 있으므로, 명시적으로 break 문을 사용하여 각 case 블록의 실행을 종료하는 것이 권장됩니다.​ [각주:3]
Using a break is recommended so that modifying the code is easier and less error prone.

 

💡Java 14의 새로운 switch 문

  • Java 14에서는 switch 문이 표현식으로 확장되어, case L -> 구문을 도입하였습니다. 이 새로운 구문은 break 문 없이도 각 case 블록을 명확하게 구분할 수 있으며, yield 키워드를 사용하여 값을 반환할 수 있습니다.​ [각주:4]
Switch expressions evaluate to a single value and can be used in statements. They may contain 'case L ->' labels that eliminate the need for break statements to prevent fall through.

 

✅ 예제

int day = 3;
switch (day) {
    case 1:
        System.out.println("월요일");
        break;
    case 2:
        System.out.println("화요일");
        break;
    case 3:
        System.out.println("수요일");
        break;
    default:
        System.out.println("기타 요일");
}

while

💡do-while

  • do-while 문은 루프 본문을 먼저 실행한 후 조건을 평가하므로, 조건이 처음부터 false여도 루프 본문이 최소 한 번은 실행됩니다. 이는 사용자 입력 검증 등 최소 한 번의 실행이 필요한 경우에 유용합니다.​ [각주:5]
The statements within the do block are always executed at least once.

 

✅ 예제

class DoWhileDemo {
    public static void main(String[] args){
        int count = 1;
        do {
            System.out.println("Count is: " + count);
            count++;
        } while (count < 11);
    }
}

break, continue

break와 continue는 루프의 흐름을 제어하는 데 사용됩니다.​ [각주:6]

반복문 (for, while, do-while)에서 사용할 수 있는 키워드입니다.

The continue statement skips the current iteration of a for, while, or do-while loop.
  • break : 현재 루프를 즉시 종료하고 루프 다음의 첫 번째 문으로 제어를 이동시킵니다.

✅ 예제

for (int i = 1; i <= 10; i++) {
    if (i == 5) {
        break; // i가 5일 때 반복 종료
    }
    System.out.println(i);
}
// 출력: 1 2 3 4
  • continue : 현재 반복의 나머지 코드를 건너뛰고 다음 반복을 시작하기 위해 조건식을 평가합니다.​ 조건식이 참이면 반복문을 실행합니다.

✅ 예제

for (int i = 1; i <= 5; i++) {
    if (i == 3) {
        continue; // i가 3일 때는 출력 건너뜀
    }
    System.out.println(i);
}
// 출력: 1 2 4 5

for

💡증감식

  • for 문의 세 번째 부분인 증감식은 루프 변수의 값을 변경하는 표현식이라면 어떤 것이든 사용할 수 있습니다. 예를 들어, i++, i--, i += 2, i *= 2 등 다양한 형태가 가능합니다.​ [각주:7]
The increment expression is invoked after each iteration through the loop; it is perfectly acceptable for this expression to increment or decrement a value.

 

✅ 예제

class ForDemo {
    public static void main(String[] args){
         for(int i=1; i<11; i++){
              System.out.println("Count is: " + i);
         }
    }
}

 

💡구성 요소 생략

  • for 문의 초기식, 조건식, 증감식은 모두 선택 사항이며, 생략이 가능합니다. 예를 들어, 조건식을 생략하면 무한 루프를 생성할 수 있습니다.​ [각주:8]
The three expressions of the for loop are optional; an infinite loop can be created.

 

✅ 예제

// infinite loop
for ( ; ; ) {
    
    // your code goes here
}

for vs while

💡핵심 차이 : 변수의 생존 범위(Scope)

항목 for 문 while 문
변수 선언 위치 루프 내부(헤더)에서 선언 가능 → 루프 끝나면 사라짐 보통 루프 외부에서 선언함 → 루프 이후에도 살아있음
스코프 루프 블록 안에서만 유효 루프 이후에도 변수 접근 가능

 

✅ for 문 예제

for (int i = 0; i < 5; i++) {
    System.out.println("i = " + i);
}

// 아래는 컴파일 에러 발생 (i는 for문 안에서만 유효)
// System.out.println(i); // ❌ 오류!

 

✅ while 문 예제

int i = 0; // 루프 외부에서 선언
while (i < 5) {
    System.out.println("i = " + i);
    i++;
}

// 정상 출력됨
System.out.println("최종 i = " + i); // ✅ 5

출처

반응형