switch는 반복문인가? switch는 조건문이라고 배웠다.
그런데 break; 는 반복문을 멈추는 용도라고 배웠는데, switch도 break; 를 사용한다. 그러면, switch는 반복문이기도 한건가? 그렇다면, 그게 어떤 의미인건가?
아니요, switch는 반복문이 아닙니다. switch는 조건문(제어문) 입니다.
하지만 switch에서도 break;를 사용하는데, 이것이 헷갈리게 만든 것 같네요.
break;의 의미는 상황에 따라 다릅니다.
- 반복문에서의 break;
예시:
java
코드 복사
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // 반복문 종료
}
System.out.println(i);
}
결과:
코드 복사
0
1
2
3
4
- 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; 사용 시 주의할 점
- 레이블은 break가 위치한 블록의 바깥에 있어야 한다.
- 레이블을 남발하지 말 것!
✅ 정리
- break는 기본적으로 가장 가까운 반복문이나 switch문을 종료함.
- break 레이블명;을 사용하면 지정한 반복문을 종료할 수 있음.
- 중첩된 반복문을 빠져나갈 때 유용하지만, 코드 가독성을 해칠 수 있으므로 적절히 사용해야 함.
👉 break label;은 "이 루프를 종료하라!"는 정확한 목표를 줄 때 사용하면 효과적! 🚀
'에듀테크 부트캠프' 카테고리의 다른 글
반복문의 무한루프, 어떤 경우에 사용하며 최적화 방법은? (0) | 2025.03.10 |
---|---|
중첩 반복문 (for - for)에서 생긴 궁금증 - 최적화, 효율, 실무 활용도의 관점 (0) | 2025.03.10 |
자바 반복문과 제어문 완벽 정리: for, while, switch, break, continue 그리고 랜덤값 활용 (0) | 2025.03.10 |
배열의 인덱스는 왜 0부터 시작할까? + 참조값의 비밀 (0) | 2025.03.10 |
0은 양수일까? 컴퓨터가 0을 처리하는 방식과 에듀테크에서의 의미 (1) | 2025.03.08 |