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 |
|---|---|---|
| 2199 | 2026. 02. 11. | JVM 메모리 튜닝과 GC 최적화 완벽 가이드 |
| 2198 | 2026. 02. 11. | Java Record와 Sealed Class 실전 디자인 패턴 |
| 2197 | 2026. 02. 11. | Java 23 신기능: Structured Concurrency와 Scoped Values |
| 2141 | 2026. 02. 11. | Java 빌드 도구 비교: Gradle vs Maven 2025 |
| 2140 | 2026. 02. 11. | JUnit 5와 Mockito를 활용한 효과적인 단위 테스트 |
| 2139 | 2026. 02. 11. | Java에서의 함수형 프로그래밍 패턴 |
| 2138 | 2026. 02. 11. | Project Loom, Panama, Valhalla: Java의 미래 |
| 2137 | 2026. 02. 11. | Java 메모리 관리와 GC 튜닝 실전 가이드 |
| 2136 | 2026. 02. 11. | GraalVM과 Java: 네이티브 컴파일의 실전 적용 |
| 2135 | 2026. 02. 11. | Java Stream API 고급 활용과 성능 최적화 |