PHpullh
학습 라이브러리/Java/Pattern Matching for switch (Java 21)

JAVA · 기초 문법

Pattern Matching for switch (Java 21)

Java 21에서 정식 도입된 switch 패턴 매칭. instanceof 체크와 캐스팅을 한 번에 처리하고, sealed class와 함께 사용하면 컴파일러가 모든 케이스를 검증합니다.

기초 문법중급pattern-matchingswitchjava21sealed

핵심 설명

Java 21에서 정식 도입된 switch 패턴 매칭. instanceof 체크와 캐스팅을 한 번에 처리하고, sealed class와 함께 사용하면 컴파일러가 모든 케이스를 검증합니다.

Java code

// Pattern Matching for switch (Java 21)
public class PatternSwitch {
    sealed interface Shape permits Circle, Rectangle, Triangle {}
    record Circle(double radius) implements Shape {}
    record Rectangle(double w, double h) implements Shape {}
    record Triangle(double base, double height) implements Shape {}

    static String describe(Shape shape) {
        return switch (shape) {
            case Circle c when c.radius() > 10
                -> "큰 원 (반지름: " + c.radius() + ")";
            case Circle c
                -> "원 (반지름: " + c.radius() + ")";
            case Rectangle r
                -> "사각형 (" + r.w() + "x" + r.h() + ")";
            case Triangle t
                -> "삼각형 (넓이: " + (t.base() * t.height() / 2) + ")";
            // sealed이므로 default 불필요 — 컴파일러가 완전성 검증
        };
    }

    // null 처리도 가능
    static String format(Object obj) {
        return switch (obj) {
            case null        -> "null";
            case Integer i   -> "정수: " + i;
            case String s    -> "문자열: " + s;
            case int[] arr   -> "배열 (길이: " + arr.length + ")";
            default          -> "기타: " + obj.getClass().getSimpleName();
        };
    }

    public static void main(String[] args) {
        System.out.println(describe(new Circle(15)));
        System.out.println(describe(new Rectangle(3, 4)));
        System.out.println(format(null));
        System.out.println(format(42));
        System.out.println(format("Hello"));
    }
}

학습 팁

when 가드 조건으로 세밀한 분기가 가능합니다. sealed 타입과 함께 사용하면 default 없이도 컴파일러가 모든 케이스를 보장합니다.

주의할 점

switch 식에서 패턴 순서가 중요합니다. 더 구체적인 패턴을 먼저 배치해야 합니다. case Circle ccase Circle c when ...보다 앞에 오면 가드 조건이 도달하지 않습니다.

자주 묻는 질문

Pattern Matching for switch (Java 21)란 무엇인가요?

Java 21에서 정식 도입된 switch 패턴 매칭. instanceof 체크와 캐스팅을 한 번에 처리하고, sealed class와 함께 사용하면 컴파일러가 모든 케이스를 검증합니다.

Pattern Matching for switch (Java 21) 학습 시 주의할 점은 무엇인가요?

switch 식에서 패턴 순서가 중요합니다. 더 구체적인 패턴을 먼저 배치해야 합니다. case Circle c 가 case Circle c when ... 보다 앞에 오면 가드 조건이 도달하지 않습니다.