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 |
|---|---|---|
| 3388 | 2026. 08. 22. | Java CompletableFuture로 외부 API 병렬 호출을 안전하게 구성하는 방법 |
| 3356 | 2026. 08. 14. | Java record와 sealed interface로 안전한 API 응답 모델 만들기 |
| 3324 | 2026. 08. 05. | Java 가상 스레드 실전 적용 가이드: I/O 중심 API의 동시성 구조 바꾸기 |
| 3292 | 2026. 07. 28. | Java 메모리 사용량이 계속 늘어날 때: Heap Dump와 JFR로 누수 원인 찾기 |
| 3261 | 2026. 07. 20. | Java record로 API DTO를 단순하게 만드는 방법: 검증·변환·직렬화 실전 적용 |
| 3235 | 2026. 07. 12. | Java API 동시 호출 폭주 대응: Thread Pool, timeout, 장애 격리로 안정성 올리기 |
| 3178 | 2026. 07. 03. | Java 메모리 누수 진단 가이드: jcmd와 JFR로 원인 좁히기 |
| 3130 | 2026. 06. 25. | Java 가상 스레드 적용 전 점검: 블로킹 I/O와 동시성 제한 운영 가이드 |
| 3074 | 2026. 06. 17. | Java 스레드 작업 취소 설계: interrupt, Future, ExecutorService 종료를 제대로 연결하기 |
| 2985 | 2026. 06. 09. | Java 컨테이너 메모리 운영 가이드: 힙, 직접 메모리, GC 로그를 함께 점검하기 |