자바 스위치 사례: 개선된 버전
12826 단어 javacodenewbiebeginnersprogramming
다음 몇 버전에서 switch-case 문이 여러 번 개선되었습니다. 개선 사항을 살펴보고 원래의 switch-case 문과 비교해 봅시다.
1. 화살표 케이스 표현
이전에는 case 블록이 break 문으로 끝나야 했습니다. 그렇지 않으면 통과 문제가 발생합니다.
// OLD
switch (x) {
case 1:
System.out.println("One");
break;
case 2:
System.out.println("Two");
break;
default:
System.out.println("Unknown");
}
이제 화살표 케이스 표현식을 사용하여 케이스 블록을 단순화할 수 있습니다. 대소문자가 일치하면 화살표 뒤에 나오는 문장만 실행됩니다.
// NEW
switch (x) {
case 1 -> System.out.println("One");
case 2 -> System.out.println("Two");
default -> throw new IllegalArgumentException();
}
이는 람다 구문과 유사합니다. 여러 문이 있는 경우 대신 블록을 사용할 수 있습니다.
// NEW (with block)
switch (x) {
case 1 -> {
System.out.println("One");
System.out.println("One again");
}
case 2 -> System.out.println("Two");
default -> System.out.println("Unknown");
}
2. 다중 일치 값
폴스루가 필요한 경우 어떻게 해야 합니까? 이전 방식에서는 각 값에 대해 별도의 사례를 작성하고 작업을 포함할 마지막 사례로 넘어가도록 해야 했습니다.
// OLD (fallthrough)
switch (x) {
case 1:
case 2:
System.out.println("Valid values");
break;
default:
System.out.println("Unknown");
}
개선된 버전에서는 쉼표로 구분된 값 목록을 사용하여 이 작업을 수행할 수 있습니다.
// NEW (multiple values)
switch (x) {
case 1, 2:
System.out.println("Valid values");
default:
System.out.println("Unknown");
}
3. 스위치 표현
큰 개선점은 switch 문을 사용하여 값을 반환할 수 있으므로 표현식으로 사용할 수 있다는 것입니다.
예를 들어 switch-case 블록 인라인을 사용하여 값을 단어로 인쇄할 수 있습니다.
// switch expressions
System.out.println(switch (x) {
case 1 -> "One";
case 2 -> "Two";
default -> "Unknown";
});
4. yield 키워드
case가 하나의 문을 가질 때 위에서 본 것처럼 문에서 반환되는 값은 switch 표현식에서 반환됩니다.
케이스에 블록이 있는 경우 yield 키워드를 사용하여 명시적으로 값을 반환해야 합니다.
// switch expressions with yield
String word = switch (x) {
case 1 -> {
doSomething();
yield "One";
}
case 2 -> "Two";
default -> "Unknown";
};
이전 스타일의 케이스 블록은 switch 식에도 사용할 수 있으며 yield 문을 포함할 수 있습니다.
yield 문을 사용할 때 break 문은 필요하지 않습니다.
그러나 이것은 권장되지 않습니다. 혼란과 예기치 않은 실수를 피하기 위해 새로운 스타일을 고수하는 것이 가장 좋습니다.
// old-style case blocks with yield
String word = switch (x) {
case 1:
doSomething();
yield "One";
case 2:
yield "Two";
default:
yield "Unknown";
};
5. 스위치 표현식의 완전성
Switch case 문은 철저할 필요가 없습니다. 대소문자가 일치하지 않고 기본 대소문자가 없어도 괜찮습니다.
그러나 값을 반환하기 위해 스위치를 사용할 때는 모든 경우가 포함되어야 하며 그 중 하나는 항상 일치해야 합니다.
예를 들어 숫자 전환을 구현할 때 기본 사례를 생략할 수 없습니다.
// missing default case
String word = switch (x) {
case 1 -> "One";
case 2 -> "Two";
};
/* gives the error:
error: the switch expression does not cover all possible input values
String word = switch (x) {
^
*/
즉, 부울로 작업하지 않는 한 항상 기본 케이스가 필요합니다.
이에 대한 유일한 예외는 열거형을 사용하고 가능한 모든 열거형 값을 포함하는 경우입니다.
아래 코드는 잘 작동하지만 사례 중 하나를 제거하면 위와 동일한 오류가 발생합니다.
// switch expressions with enum
public class MyClass {
static enum Color { RED, GREEN, BLUE };
public static void main(String[] args) {
Color color = Color.RED;
System.out.println(switch (color) {
case RED -> "Red";
case GREEN -> "Green";
case BLUE -> "Blue";
});
}
}
그것이 개선을 위한 것입니다. 언급할 가치가 있는 또 하나의 기능은 패턴 일치이지만 아직 미리 보기 기능이기 때문에 다루지 않았습니다.
주목해야 할 중요한 점은 구문이 개선되었다고 해서 이전 구문이 현재 유효하지 않다는 의미는 아닙니다. 두 구문 모두 작동합니다.
읽어 주셔서 감사합니다. 나와 소통하고 싶다면 정기적인 Java 팁과 퀴즈를 게시하는 곳에서 나를 찾을 수 있습니다.
Reference
이 문제에 관하여(자바 스위치 사례: 개선된 버전), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/abh1navv/java-switch-case-the-improved-version-1012텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)