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 c가 case 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 ... 보다 앞에 오면 가드 조건이 도달하지 않습니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.