프로그래밍/JAVA

[JAVA] 자바 17 특징 - Switch 문

lazy man 2023. 5. 1. 00:44

자바 17에서는 Switch 문의 기능이 개선되었다. 향상된 Switch 문을 사용하면 break 문을 사용하거나 여러 개의 case를 묶을 때 자바 11 이전의 버전보다 편리하게 사용할 수 있다.

 

1. 자바 11 이전의 switch ~ case 문

    @Test
    public void oldStyleSwitchExpression() {
        int result ;
        Month month = FEBRUARY;//
        switch(month) {
            case JANUARY :
            case JUNE :
            case JULY :
                result = 3;
                break;
            case FEBRUARY:
            case SEPTEMBER:
            case OCTOBER:
            case NOVEMBER:
            case DECEMBER:
                result = 1;
                break;
            case MARCH:
            case MAY:
            case APRIL:
            case AUGUST:
                result = 2;
                break;
            default :
                result = 0;
        }
        Assertions.assertEquals(1, result);
    }

 

2. Switch문 Return

- swtich 문의 결과를 변수에 저장할 수 있으며 람다식을 사용할 수 있다. 여러 개의 case를 구분해야 하는 경우에도 마(,)로 간결하게 표현이 가능하기 때문 코드 가독성이 개선되었다.

    @Test
    public void newSwitchExpressionReturnToValue() {
        Month month = FEBRUARY;//
        var result1 = switch (month) {
            case JANUARY, JUNE, JULY -> 3;
            case FEBRUARY, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER -> 1;
            case MARCH, MAY, APRIL, AUGUST -> 2;
            default -> 0;
        };

        Assertions.assertEquals(1, result1);
    }

 

- swtich 문 내에서 결과를 바로 리턴할 수도 있으며 이런 경우 중괄호를 사용해야 한다.

    @Test
    public int newSwitchExpressionReturnMethod() {
        Month month = FEBRUARY;
        switch (month) {
            case JANUARY, JUNE, JULY -> { return 3;}
            case FEBRUARY, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER -> { return 1;}
            case MARCH, MAY, APRIL, AUGUST -> { return 2;}
            default -> { return 0;}
        }
    }

 

 

3. yield 키워드

- switch 문의 결과를 변수에 담고 싶은데 여러 줄의 코드를 작성해야 하는 경우 중괄호를 사용하고 return 대신 yield 키워드를 사용하여 값을 반환할 수 있다.

    @Test
    public void newSwitchExpressionYield() {
        Month month = MARCH;
        var result = switch (month) {
            case JANUARY, JUNE, JULY -> 3;
            case FEBRUARY, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER -> 1;
            case MARCH, MAY, APRIL, AUGUST -> {
                System.out.println("code block result");
                yield 2;
            }
            default -> 0;
        };
        Assertions.assertEquals(2, result);
    }

 

 

 


2023.04.30 - [기타/프로그래밍 언어] - [JAVA] 자바 17 특징 - 텍스트 블록

 

[JAVA] 자바 17 특징 - 텍스트 블록

1. 기존 스타일과의 비교 String textBlockHtml = """ example text """; @Test public void givenAnOldStyleMultilineString_whenComparing_thenEqualsTextBlock() { String expected = "\n" + "\n" + " \n" + " example text\n" + " \n" + ""; assertEquals(expect

lazy-man.tistory.com

2023.05.01 - [기타/프로그래밍 언어] - [JAVA] 자바 17 특징 - Record Type

 

[JAVA] 자바 17 특징 - Record Type

불변성을 가지는 데이터 클래스를 위한 타입이다. 자바 14 이전 버전에서는 불변의 데이터 클래스를 생성하기 위해서는 private final 필드, 모든 필드를 초기화하는 생성자, equals 메서드, toString 메

lazy-man.tistory.com

2023.05.01 - [기타/프로그래밍 언어] - [JAVA] 자바 17 특징 - Sealed Class

 

[JAVA] 자바 17 특징 - Sealed Class

sealed class, interface는 상속하거나 구현할 클래스를 지정하고, 지정한 클래스 외에는 상속 또는 구현할 수 없도록 하는 기능으로 무분별한 상속과 구현을 방지할 수 있습니다. 1. sealed 클래스(인터

lazy-man.tistory.com

2023.05.01 - [기타/프로그래밍 언어] - [JAVA] 자바 17 특징 - 기타

 

[JAVA] 자바 17 특징 - 기타

이번 포스팅에서는 자바 17의 특징 중 텍스트 블록, Switch 문, Record, Sealed 외의 특징에 대해 알아보도록 하겠습니다. 1. instanceof instanceof 체크할 때 변수를 선언할 수 있기 때문에 좀 더 간결한 코드

lazy-man.tistory.com