Java/문법

switch 표현식 (Switch Expression)

가지코딩 2025. 4. 18. 15:11

switch 표현식

Java 12 에서 처음 소개 되었고,

Java 14 에서 정식 릴리즈 되었다고 한다.


기존 switch 구문의 문제점

  • break를 깜빡하면 fall-through 오류 발생하한다.
  • 값을 직접 반환할 수 없다.
  • 코드가 장황해지기 쉽다.
int result;
switch (op) {
    case '+':
        result = a + b;
        break;
    case '-':
        result = a - b;
        break;
    default:
        result = 0;
}

switch 표현식의 특징 (Java 14+)

  • switch 자체가 값을 반환하므로 변수에 바로 대입 가능하다.
  • 콜론(:) 대신 화살표(->) 사용
  • yield 키워드 사용
    • 하나의 문장(또는 표현식)이면 yield 키워드를 생략할 수 있다.
  • break 생략
    • fall-through 없음 → 버그 방지
int result = switch (op) {
    case '+' -> a + b;
    case '-' -> a - b;
    default -> 0;
};
// 복잡한 연산 시
int result = switch (op) {
    case '+' -> {
        System.out.println("덧셈 수행");
        yield a + b;
    }
    case '-' -> {
        yield a - b;
    }
    default -> throw new IllegalArgumentException("잘못된 연산자");
};

switch 표현식 주의할 점

모든 case가 다 처리되지 않으면 컴파일 에러가 발생된다.

int result = switch (op) {
    case '+' -> a + b;
    case '-' -> a - b;
    // ❌ 모든 문자 입력에 대해 결과가 정의되지 않음
};

---

// 해결 방안 
int result = switch (op) {
    case '+' -> a + b;
    case '-' -> a - b;
    default -> 0; // 또는 예외 던지기
};

 

 

 

 

예외: 열거형(enum) 사용 시엔 예외 가능

  • enum의 모든 상수를 처리하면 default 생략 가능
enum Operation { PLUS, MINUS }

Operation op = Operation.PLUS;

int result = switch (op) {
    case PLUS -> a + b;
    case MINUS -> a - b;
    // 이 경우, 모든 enum 값이 다 처리되었으므로 default 없어도 OK!
};

'Java > 문법' 카테고리의 다른 글

가변 인자 (...)  (0) 2025.04.29
String.split() 문자열 자르기, 나누기  (0) 2025.04.22
어노테이션(Annotation)  (0) 2025.04.21
Enum 열거형 타입  (0) 2025.04.21
유틸리티 클래스 (Utility Class)  (1) 2025.04.18