BackEnd/Java

Java 14. Switch Expression

hanseom 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 -> "지나가세요.";
  };
}

 

반응형