
자바를 처음 배울 때, 내가 알던 자바의 switch 문은 아래와 같은 형식이었다.
String str = "Mon";
String day = "";
switch(str) {
case "Mon" :
day = "월요일";
break;
case "Tue" :
day = "화요일";
break;
case "Wed" :
day = "수요일";
break;
case "Thu" :
day = "목요일";
break;
case "Fri" :
day = "금요일";
break;
case "Sat" :
day = "토요일";
break;
default :
day = "일요일";
break;
}
System.out.println(day); // 월요일
그런데 자바 14번 버전부터 break; 문을 쓰지 않아도 된다.
그러면 중간에 조건문 이탈을 어떻게 해야하는가?
없어졌다. -> 화살표를 쓰면 끝이다.
이제는 위의 문장이 아래처럼 바뀐다.
String str = "Mon";
String day = "";
switch(str) {
case "Mon" -> day = "월요일";
case "Tue" -> day = "화요일";
case "Wed" -> day = "수요일";
case "Thu" -> day = "목요일";
case "Fri" -> day = "금요일";
case "Sat" -> day = "토요일";
default -> day = "일요일";
}
System.out.println(day); // 월요일
이렇게 간단하게 바뀌었다.
그리고 기존에 case 레이블을 연달아 쓸 때는
int day = 3;
String dayType = "";
switch (day) {
case 1 :
case 2 :
case 3 :
case 4 :
case 5 :
dayType = "평일";
break;
case 6 :
case 7 :
dayType = "주말";
break;
default :
dayType = "잘못된 요일";
};
System.out.println(dayType); // 출력: 평일
위처럼 사용했었는데, 이제는 아래와 같이 쉼표로 구분하여 간편하게 사용할 수 있게 되었다.
int day = 3;
String dayType = switch (day) {
case 1, 2, 3, 4, 5 -> "평일";
case 6, 7 -> "주말";
default -> "잘못된 요일";
};
System.out.println(dayType); // 출력: 평일
그리고 변수에 바로 String A = switch(조건변수) { } 이런 식으로 데이터 대입이 가능하다.
그리고 아래의 구문을 보면 그동안 보지 못했던 것이 나온다
int score = 85;
String grade = switch (score) {
case 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100 -> {
System.out.println("최고 점수입니다.");
yield "A";
}
case 80, 81, 82, 83, 84, 85, 86, 87, 88, 89 -> "B";
case 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 -> "C";
default -> "F";
};
System.out.println(grade); // 출력: B
yield? 새로 생긴 예약어인데, switch 문의 결과값을 저장하는 역할을 한다.
grade = "A"; 이렇게 저장한 내용은 없다.
근데 yield "A"; 이렇게 함으로써 grade 변수에 자동으로 "A" 가 대입된다.
그리고 기존 스타일의 구문과 신규 스타일의 구문 혼용이 가능하다.
int value = 2;
String result = switch (value) {
case 1:
yield "one";
case 2:
yield "two";
default:
yield "other";
};
System.out.println(result); // 출력: two
콜론(:)도 사용 가능하고, 표현식으로(변수에 바로 값을 대입할 수 있는 형태로) 사용이 가능하지만,
웬만하면 -> 화살표를 써서 처리하는 것이 더 깔끔해 보인다.
( 화살표가 더 직관적인 느낌..?)
그래서 핵심적인 내용을 요약하면 아래와 같다.
- switch 문이 표현식으로 사용 가능해져 결과를 변수에 할당하거나 다른 표현식에 사용할 수 있다.
- case 레이블에 화살표(->)를 사용하여 코드를 간결하게 만들고, break 문을 생략할 수 있다.
- 하나의 case 레이블에 여러 값을 쉼표(,)로 구분하여 지정할 수 있다.
- switch 표현식에서 값을 반환할 때는 yield 키워드를 사용합니다.
이렇게 미루어 볼 때, 스위치문이 간편해짐으로써 좀 더 직관적이고 간결한 프로그래밍을 할 수 있게 되었다.
'자바 > 개념' 카테고리의 다른 글
[Java/개념] equals() 와 hashCode() (0) | 2024.01.19 |
---|---|
[Java/개념] 값 비교( '==' 동등 비교 vs equals() 객체 비교) (0) | 2023.03.08 |
[java/개념] 세마포어(Semaphore)와 뮤텍스(Mutex) (0) | 2021.11.06 |
[java] Garbage Collector(GC) - 가비지 컬렉터 (0) | 2021.09.18 |
[java] 자바 RMI(Remote Method Invocation) (0) | 2021.09.10 |
댓글