Contents
see List작성일 2026. 04. 11.
Java 24 Pattern Matching 개요
Java 24(JDK 24)에서 Pattern Matching이 원시 타입(primitive type)까지 확장되었습니다. 이전까지 instanceof와 switch의 패턴 매칭은 참조 타입에만 적용되었지만, Java 24 Preview Feature로 int, long, double 등 모든 원시 타입에서 패턴 매칭을 사용할 수 있습니다.
활성화 방법
Preview Feature이므로 컴파일과 실행 시 모두 플래그가 필요합니다.
# 컴파일
javac --enable-preview --release 24 Main.java
# 실행
java --enable-preview Maininstanceof에서 원시 타입 패턴
// 기존 방식 - 수동 캐스팅 필요
Object value = 42;
if (value instanceof Integer) {
int num = (Integer) value;
System.out.println("정수: " + num);
}
// Java 24 - 원시 타입 패턴 매칭
Object value = 42;
if (value instanceof int num) {
System.out.println("정수: " + num); // 자동 언박싱 + 바인딩
}switch에서 원시 타입 패턴
switch 표현식에서 원시 타입별로 분기할 수 있습니다.
// Java 24 switch에서 원시 타입 패턴
static String classify(Object obj) {
return switch (obj) {
case int i when i > 0 -> "양의 정수: " + i;
case int i when i < 0 -> "음의 정수: " + i;
case int i -> "영";
case long l -> "long 값: " + l;
case double d when d != d -> "NaN";
case double d -> "실수: " + d;
case String s -> "문자열: " + s;
case null -> "null";
default -> "기타: " + obj;
};
}
// 사용 예시
System.out.println(classify(42)); // "양의 정수: 42"
System.out.println(classify(-7)); // "음의 정수: -7"
System.out.println(classify(3.14)); // "실수: 3.14"
System.out.println(classify("hello")); // "문자열: hello"가드 패턴(Guarded Pattern) 활용
// when 절로 조건부 매칭
static String gradeScore(int score) {
return switch (score) {
case int s when s >= 90 -> "A";
case int s when s >= 80 -> "B";
case int s when s >= 70 -> "C";
case int s when s >= 60 -> "D";
case int s -> "F";
};
}
// 범위 검증
static void validatePort(int port) {
switch (port) {
case int p when p >= 1 && p <= 1023 ->
System.out.println("Well-known port: " + p);
case int p when p >= 1024 && p <= 49151 ->
System.out.println("Registered port: " + p);
case int p when p >= 49152 && p <= 65535 ->
System.out.println("Dynamic port: " + p);
default ->
throw new IllegalArgumentException("Invalid port: " + port);
}
}Record와 결합
record Point(int x, int y) {}
record Circle(Point center, double radius) {}
static String describeShape(Object shape) {
return switch (shape) {
case Circle(Point(int x, int y), double r) when r > 100 ->
"큰 원 at (" + x + "," + y + ") r=" + r;
case Circle(Point(int x, int y), double r) ->
"원 at (" + x + "," + y + ") r=" + r;
default -> "알 수 없는 도형";
};
}핵심 정리
- Java 24에서 원시 타입 패턴 매칭 Preview로 도입
- instanceof와 switch 모두에서 int, long, double 등 사용 가능
- when 가드 절로 조건부 매칭 지원
- Record 패턴과 결합하여 중첩 구조 분해 가능
- --enable-preview 플래그 필수
java
| No | 작성일 | Title |
|---|---|---|
| 2928 | 2026. 06. 01. | Java Virtual Threads 운영 전환 가이드: 블로킹 API, 커넥션 풀, 관측 지표 점검법 |
| 2874 | 2026. 05. 24. | Java 서비스 ThreadPoolExecutor 포화 방지: 큐 크기, 거절 정책, 백프레셔 실전 가이드 |
| 2799 | 2026. 05. 16. | Java 운영 장애 분석을 위한 JFR·jcmd 실전 가이드: 재시작 없이 CPU·메모리 증거 남기기 |
| 2603 | 2026. 04. 24. | Java 26 Pattern Matching 실전 가이드: Records · Sealed Classes · Primitive Patterns로 분기 없는 도메인 모델링 |
| 2518 | 2026. 04. 16. | Java 26 Virtual Threads & Structured Concurrency 실전 가이드: 가상 스레드로 고성능 서버 구축하기 |
| 2491 | 2026. 04. 14. | Java 21/25 Virtual Threads 완벽 가이드: 기존 스레드 모델과의 차이, 실전 활용법 |
| 2470 | 2026. 04. 13. | Java 25 Virtual Threads & Structured Concurrency 완벽 가이드 |
| 2450 | 2026. 04. 12. | Java 21 Virtual Threads 완벽 가이드: Project Loom으로 수백만 스레드 다루기 |
| 2426 | 2026. 04. 11. | Java 24 Primitive Type Pattern Matching 완벽 가이드 - switch와 instanceof 확장 |
| 2390 | 2026. 04. 09. | Java 26 신기능 완벽 가이드 - AOT 캐시, Compact Headers, 패턴 매칭 실전 활용 |