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 |
|---|---|---|
| 2134 | 2026. 02. 11. | Record와 Sealed Class로 견고한 도메인 모델링 |
| 2133 | 2026. 02. 11. | Virtual Thread 실전 활용: 동시성 프로그래밍의 혁명 |
| 2132 | 2026. 02. 11. | Java 23 새로운 기능 완전 정리: Pattern Matching의 진화 |
| 2023 | 2025. 11. 30. | Java 직렬화와 JSON 처리 - Jackson 활용 |
| 2022 | 2025. 11. 30. | Java 테스트 - JUnit 5와 Mockito |
| 2021 | 2025. 11. 30. | Java 함수형 프로그래밍 - Lambda와 Method Reference |
| 2020 | 2025. 11. 30. | Lombok 활용 가이드 - 보일러플레이트 제거 |
| 2019 | 2025. 11. 30. | Java Record와 Sealed Class 활용 |
| 2018 | 2025. 11. 30. | 효과적인 Java 예외 처리 전략 |
| 2017 | 2025. 11. 30. | JVM 메모리 구조와 GC 튜닝 |