에듀테크 부트캠프

switch는 조건문인데 반복문이기도 한건가?

wy-family 2025. 3. 10. 22:15

switch는 반복문인가? switch는 조건문이라고 배웠다.

그런데 break; 는 반복문을 멈추는 용도라고 배웠는데, switch도 break; 를 사용한다. 그러면, switch는 반복문이기도 한건가? 그렇다면, 그게 어떤 의미인건가?

 

아니요, switch는 반복문이 아닙니다. switch는 조건문(제어문) 입니다.
하지만 switch에서도 break;를 사용하는데, 이것이 헷갈리게 만든 것 같네요.

break;의 의미는 상황에 따라 다릅니다.

  1. 반복문에서의 break;

예시:
java
코드 복사
for (int i = 0; i < 10; i++) {

    if (i == 5) {

        break; // 반복문 종료

    }

    System.out.println(i);

}

  •  

결과:
코드 복사
0

1

2

3

4

  •  
  1. switch에서의 break;

예시:
java
코드 복사
int num = 2;

switch (num) {

    case 1:

        System.out.println("One");

        break;

    case 2:

        System.out.println("Two");

        break; // 여기서 switch문 종료

    case 3:

        System.out.println("Three");

        break;

    default:

        System.out.println("Other");

}

  •  

결과:
nginx
코드 복사
Two

  •  
  • 만약 break;가 없다면, 실행된 case 아래의 모든 코드가 실행됩니다. (이것을 "fall-through"라고 합니다.)

결론

  • switch는 반복문이 아니다. (switch는 조건문!)
  • break;는 반복문과 switch에서 각각 다르게 동작한다.
  • switch가 반복문처럼 작동하지 않는 이유는 한 번만 실행되고 끝나기 때문입니다. (while이나 for처럼 계속 반복 실행되지 않음.)

👉 break;는 문맥에 따라 다른 역할을 한다는 점을 기억하면 혼동하지 않을 수 있습니다! 😊

나의 말:

a: break a; 에 대해서 설명해줘볼래? break의 효과를 적용할 위치를 정하는 것 말이야.

ChatGPT의 말:

break a;와 같은 형태에서 a는 **레이블(label)**을 의미하며, break를 사용할 특정 블록을 지정하는 역할을 합니다. 이를 **레이블(label)을 사용한 break**라고 합니다.


📌 break의 기본적인 동작

break;는 일반적으로 가장 가까운 switch 또는 반복문(for, while, do-while)을 즉시 종료하는 역할을 합니다.

그러나, 중첩된 반복문이 있을 때 특정 반복문만 종료하고 싶다면 어떻게 해야 할까요?
이럴 때 **레이블을 사용한 break**를 활용할 수 있습니다.


🎯 break label;의 의미

  • break 레이블이름; 형태로 사용하면, 해당 레이블이 붙은 반복문을 즉시 종료할 수 있습니다.
  • 레이블은 :을 붙여 선언합니다.
  • 레이블을 사용하지 않은 break;는 가장 가까운 반복문만 종료합니다.

🔍 예제 1: 레이블 없는 일반 break;

java

코드 복사

for (int i = 0; i < 3; i++) {

    for (int j = 0; j < 3; j++) {

        if (i == 1 && j == 1) {

            break; // 가장 가까운 j 루프만 종료

        }

        System.out.println("i=" + i + ", j=" + j);

    }

}

 

출력 결과

ini

코드 복사

i=0, j=0

i=0, j=1

i=0, j=2

i=1, j=0

i=2, j=0

i=2, j=1

i=2, j=2

 

  • (1,1)에서 break;가 실행되면 j 루프만 종료되고 i 루프는 계속 진행됩니다.

🔍 예제 2: 레이블을 사용한 break;

java

코드 복사

outer: // 레이블 지정

for (int i = 0; i < 3; i++) {

    for (int j = 0; j < 3; j++) {

        if (i == 1 && j == 1) {

            break outer; // `outer` 레이블이 붙은 `for` 루프를 종료

        }

        System.out.println("i=" + i + ", j=" + j);

    }

}

 

출력 결과

ini

코드 복사

i=0, j=0

i=0, j=1

i=0, j=2

i=1, j=0

 

  • (1,1)에서 break outer;를 만나면 가장 바깥쪽 for 루프까지 완전히 종료됩니다.

📌 break label;이 필요한 이유

  • 일반적인 break;는 가장 가까운 반복문만 종료하지만,
  • 레이블이 붙은 break label;은 특정 블록을 종료할 수 있음중첩된 반복문을 한 번에 빠져나갈 때 유용함.

🔍 예제 3: while에서 레이블을 사용한 break

java

코드 복사

int i = 0, j = 0;

outer:

while (i < 3) {

    while (j < 3) {

        if (i == 1 && j == 1) {

            break outer; // 가장 바깥쪽 while 루프까지 종료

        }

        System.out.println("i=" + i + ", j=" + j);

        j++;

    }

    i++;

    j = 0; // `j`를 초기화하여 다시 내부 루프 실행 가능하게 함.

}

 

출력 결과

ini

코드 복사

i=0, j=0

i=0, j=1

i=0, j=2

i=1, j=0

 

  • (1,1)에서 break outer;를 만나면 while 루프 전체가 종료됨.

🚨 break label; 사용 시 주의할 점

  1. 레이블은 break가 위치한 블록의 바깥에 있어야 한다.
  2. 레이블을 남발하지 말 것!

✅ 정리

  • break는 기본적으로 가장 가까운 반복문이나 switch문을 종료함.
  • break 레이블명;을 사용하면 지정한 반복문을 종료할 수 있음.
  • 중첩된 반복문을 빠져나갈 때 유용하지만, 코드 가독성을 해칠 수 있으므로 적절히 사용해야 함.

👉 break label;은 "이 루프를 종료하라!"는 정확한 목표를 줄 때 사용하면 효과적! 🚀