Java의 switch
문은 특정 변수의 값에 따라 다른 코드를 실행할 때if-else
문보다 코드를 훨씬 깔끔하게 만들어주는 제어문입니다.
Java 버전이 올라가면서 switch
는 더 안전하고 강력하게 발전했습니다. 핵심만 빠르게 알아보겠습니다.
1️⃣ 일반적인 switch문
(Java 11 이전)
가장 전통적인 형태로, case
, break
, default
키워드를 사용합니다.
- 변수 값이
case
와 일치하면 해당 지점부터 코드를 실행합니다. break
를 만나야switch
문을 탈출합니다.
만약break
를 생략하면, 다음case
의 코드가 멈추지 않고 실행되는 "Fall-through"가 발생합니다.- Fall-through를 의도적으로 사용하여 여러
case
에 대해 동일한 코드를 실행할 수 있습니다.
// 예시: Fall-through를 이용해 여러 case 처리
int day = 3;
String type = "";
switch (day) {
case 1:
case 2:
case 3:
case 4:
case 5:
type = "평일";
break; // break가 없으면 아래 case 6으로 넘어감
case 6:
case 7:
type = "주말";
break;
default:
type = "알 수 없음";
break;
}
// type은 "평일"
Fall-through(폴스루) 는 switch 문에서 break를 만나기 전까지, 일치하는 case 지점부터
아래로 멈추지 않고 코드를 계속 실행하는 switch의 고유한 동작 방식을 의미합니다.
💡자주 하는 오해: switch
는 어떻게 case
를 찾을까요?
"만약 case 1: case 2: case 3:
이 있고 입력값이 2
라면, case 1
이 아니니까 통과되어 case 2
에 도달하지 못하는 게 아닌가?" 하는 오해가 있을 수 있습니다.
switch
는 위에서부터 순서대로 검사하지 않습니다.switch
는 입력값을 확인한 후, 그 값과 일치하는 case
라벨로 직접 점프합니다.
int day = 2;
String type = "";
switch (day) { // day는 2
case 1:
case 2: // case 2에 바로 도착! 이후 break 가 없으니 쭉쭉 내려간다
case 3:
type = "평일";
break; // break를 만나 switch 문 탈출
case 4:
case 5:
type = "주말";
break;
}
// 최종적으로 type은 "평일"이 됩니다
switch(n)은 처음부터 case n 이라는 표지판을 찾아 바로 이동합니다.
그리고 그곳에 break가 없으면 다음 break가 나올 때까지 멈추지 않고 아래로 내려가는 것입니다.
2️⃣ 개선된 switch
문 (Java 14+)
Java 14부터는 기존 switch
의 단점을 보완하고 가독성을 높인 새로운 문법이 도입되었습니다.
① 쉼표(,)로 case
묶기
Fall-through 방식보다 의도가 명확하고 코드가 훨씬 깔끔해집니다.
switch (day) {
case 1, 2, 3, 4, 5: // 쉼표로 여러 조건을 한 번에 묶음
type = "평일";
break;
case 6, 7:
type = "주말";
break;
default:
type = "알 수 없음";
break;
}
② 화살표(->
)와 switch
표현식
가장 큰 변화로, switch
가 값을 반환하는 표현식(Expression)으로도 사용될 수 있습니다.
- 화살표(
->
):break
가 필요 없습니다. 화살표 오른쪽의 코드만 실행하고switch
가 자동으로 종료됩니다. - 값 반환:
switch
의 결과 자체를 변수에 바로 할당할 수 있어 코드가 매우 간결해집니다.
// 예시: switch 표현식을 사용해 바로 변수에 값을 할당
String type = switch (day) {
case 1, 2, 3, 4, 5 -> "평일";
case 6, 7 -> "주말";
default -> "알 수 없음";
}; // 표현식의 끝은 세미콜론(;)으로 마무리
③ 복잡한 로직과 yield
화살표(->
) 뒤에 한 줄 이상의 복잡한 로직이 필요할 때, {}
블록 안에서 yield
키워드로 값을 반환합니다.
String type = switch (day) {
case 1, 2, 3, 4, 5 -> "평일";
case 6, 7 -> {
System.out.println("주말입니다!");
yield "주말"; // 이 블록의 최종 반환 값은 "주말"
}
default -> "알 수 없음";
};
핵심 요약
구분 | switch문 | 개선된 switch문 (Java 14+) |
역할 | 문장 (Statement) | 문장(Statement) + 표현식(Expression) |
여러 case 처리 |
case 1: case 2: (Fall-through) |
case 1, 2, 3: (쉼표로 묶음) |
break 필요성 |
필수 | 불필요 (-> 사용 시) |
값 반환 | 불가능 | 가능 (-> 또는 yield 사용) |
'Backend > Java' 카테고리의 다른 글
[Java] 자바 정규 표현식(Regular Expression) 정리 (1) | 2025.08.05 |
---|---|
[Java] replace()와 replaceAll()의 차이점 (0) | 2025.07.22 |
[Java] 약수의 개수를 구하는 효율적인 알고리즘 정리 (0) | 2025.07.16 |
[Java] 배열 복사 메서드 간단 정리 (0) | 2025.07.15 |
[Java, String] split() 메서드 정리 - 문자열 자르기 (0) | 2025.07.13 |