ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java 14. Switch Expression
    BackEnd/Java 2024. 12. 7. 08:30
    반응형

    statement vs expression

    • statement: 어떠한 프로그래밍 문장으로 조건문, 반복문 등이 해당됩니다.
    • expression: 프로그래밍 문장이긴 한데 결과값이 하나의 값으로 정해지는 문장입니다. 3항 연산자 등이 해당됩니다.
    // expression
    String grade = score >= 50 ? "P" : "F";

     

    Switch Expression

      기존에 statement였던 switch 문을 expression으로 사용할 수 있게 강화된 기능입니다. Java 12 preview, Java 14 정식 기능으로 출시되었습니다.

     

    • 기존의 switch statement
    private String calculateTestGrade(int score) {
      String grade = "";
      switch (score) {
        case 5: // colon case label
          grade = "A";
          break;
      	case 4:
        case 3:
          grade = "B";
          break;
        case 2:
        case 1:
          grade = "C";
          break;
        default:
          grade = "F";
      }
      return grade;
    }

     

    • 개선된 switch expression
    private String calculateTestGrade(int score) {
      return switch (score) {
        case 5:
          yield "A"; // yield를 통해 반환값을 지정합니다.
        case 4, 3:   // 여러 라벨을 한 번에 처리하기 위해 ","을 사용합니다.
          yield "B";
        case 2, 1:
          yield "C";
        default:
          yield "F";
      };
    }

     

    • arrow case label
    private String calculateTestGrade(int score) {
      return switch (score) {
        case 5 -> "A";    // yield 생략 가능. 단, 중괄호 사용 시 yield를 반드시 사용해야 합니다.
        case 4, 3 -> "B";
        case 2, 1 -> "C";
        default -> "F";
      };
    }

     

    switch expression 특징

    • 반드시 최종 결과가 하나의 값으로 만들어져야 합니다. 예외를 던지는 것은 가능합니다.
    private String calculateTestGrade(int score) {
      return switch (score) {
        case 5 -> {
          System.out.println("만점입니다!");
          yield "A"; 
        }
        case 4, 3 -> throw new IllegalArgumentException();
        case 2, 1 -> "C";
        default -> "F";
      };
    }

     

    • Enum과 함께 사용하면 시너지 효과를 낼 수 있습니다. Enum 클래스의 경우, 컴파일 시점에 어떤 타입이 있는지 알 수 있기 때문에 다음과 같이 default를 사용하지 않아도 됩니다.
    enum Color {RED, YELLOW, GREEN}
    
    public String getSignal(Color color) {
      return switch(color) {
        case RED -> "멈추세요.";
        case YELLOW -> "곧 빨간색으로 바뀝니다.";
        case GREEN -> "지나가세요.";
      };
    }

     

    반응형

    'BackEnd > Java' 카테고리의 다른 글

    Java 16. instanceof Pattern Matching  (0) 2024.12.08
    Java 15. Text Block  (0) 2024.12.07
    Java 12. preview feature  (0) 2024.12.07
    Java 11. 주요 변경 내용  (2) 2024.12.06
    Java 10. 주요 변경 내용  (1) 2024.12.05

    댓글

Designed by Tistory.