본문 바로가기
자바 (JAVA)

📚 Java 12+ Switch Expression(표현식) 사용법

by demianpark127 2025. 1. 7.
SMALL

📚 Java 12+ Switch Expression(표현식) 사용법

Java 12부터 **switch가 표현식(Expression)**으로 사용될 수 있습니다. switch를 표현식으로 사용하면 더 간결하고 명확한 코드를 작성할 수 있습니다.


 1. 기본 Switch 문 (Statement 방식)

📌 예제: 요일 출력하기

public class SwitchStatementExample {
    public static void main(String[] args) {
        String day = "MONDAY";
        String type;

        switch (day) {
            case "MONDAY":
            case "TUESDAY":
            case "WEDNESDAY":
            case "THURSDAY":
            case "FRIDAY":
                type = "Weekday";
                break;
            case "SATURDAY":
            case "SUNDAY":
                type = "Weekend";
                break;
            default:
                type = "Invalid day";
        }

        System.out.println("Day type: " + type);
    }
}

 

🔄 문제점:

  • 코드가 길어지고 가독성이 떨어질 수 있습니다.
  • 중복 case가 많을 경우 코드가 복잡해집니다.

 

 2. Switch 표현식 (Java 12 이상)

📌 예제: switch 표현식으로 변환

public class SwitchExpressionExample {
    public static void main(String[] args) {
        String day = "MONDAY";

        String type = switch (day) {
            case "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY" -> "Weekday";
            case "SATURDAY", "SUNDAY" -> "Weekend";
            default -> "Invalid day";
        };

        System.out.println("Day type: " + type);
    }
}

 3. Switch Expression with yield (Java 13 이상)

yield 키워드를 사용하여 값을 반환할 수 있습니다.

public class SwitchYieldExample {
    public static void main(String[] args) {
        String day = "MONDAY";

        String type = switch (day) {
            case "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY" -> {
                System.out.println("Processing a weekday");
                yield "Weekday";
            }
            case "SATURDAY", "SUNDAY" -> {
                System.out.println("Processing a weekend");
                yield "Weekend";
            }
            default -> {
                System.out.println("Invalid day input");
                yield "Invalid day";
            }
        };

        System.out.println("Day type: " + type);
    }
}

🔑 yield 설명:

  • 블록 {} 내에서 값을 반환할 때 yield를 사용합니다.
  • 복잡한 로직이 필요한 경우 유용합니다.

 4. Enum과 Switch 표현식

📌 예제: Enum 사용

enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

public class SwitchEnumExample {
    public static void main(String[] args) {
        Day day = Day.MONDAY;

        String type = switch (day) {
            case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> "Weekday";
            case SATURDAY, SUNDAY -> "Weekend";
        };

        System.out.println("Day type: " + type);
    }
}

✅ 설명:

  • switch 표현식은 default를 요구하지 않습니다. (모든 enum 값이 처리된 경우)

 5. Switch 표현식과 반환값 사용

📌 예제: 계산기 프로그램

 

public class SwitchExpressionCalculator {
    public static void main(String[] args) {
        int a = 10;
        int b = 5;
        String operator = "+";

        int result = switch (operator) {
            case "+" -> a + b;
            case "-" -> a - b;
            case "*" -> a * b;
            case "/" -> a / b;
            default -> throw new IllegalArgumentException("Invalid operator");
        };

        System.out.println("결과: " + result);
    }
}

✅ 설명:

  • switch 표현식에서 바로 값을 반환할 수 있습니다.
  • default를 통해 예외 처리를 명확히 할 수 있습니다.

 6. Switch 표현식 vs Switch 문

 

Switch 문 Switch 표현식
case와 break 필요 -> 화살표 사용
블록 내에서 코드 실행 값을 반환
default 필요 모든 경우 처리되면 default 필요 없음
복잡하고 길어질 수 있음 간결하고 명확함

 

7. Switch 표현식 활용 예제

📌 예제: 학생 점수 등급 매기기

public class SwitchGradeExample {
    public static void main(String[] args) {
        int score = 85;

        String grade = switch (score / 10) {
            case 10, 9 -> "A";
            case 8 -> "B";
            case 7 -> "C";
            case 6 -> "D";
            default -> "F";
        };

        System.out.println("학생 등급: " + grade);
    }
}

✅ 설명:

  • 숫자 범위에 따라 switch를 사용할 수 있습니다.
  • / 10을 통해 10단위로 점수를 나눕니다.

8. 주의사항

  1. Java 12 이상에서만 switch 표현식을 사용할 수 있습니다.
  2. yield는 Java 13+ 버전에서 지원됩니다.
  3. 모든 경우가 처리되지 않으면 컴파일 오류가 발생할 수 있습니다.

9. 결론

  • 간결성: 코드가 더 명확하고 읽기 쉬워집니다.
  • 안정성: 모든 경우가 처리되도록 설계됩니다.
  • 유연성: 표현식으로 사용할 수 있어 값 반환이 가능합니다.
LIST