본문 바로가기
Backend2026년 4월 25일9분 읽기

Java 25 LTS — Pattern Matching·String Templates·Stable Values 실전

YS
김영삼
조회 1
Java 25 LTS — Pattern Matching·String Templates·Stable Values 실전

핵심 요약

Java 25 (2025-09)는 새 LTS. Java 21 → 25 사이 가장 큰 변화는 Pattern Matching·String Templates 정식화·Virtual Threads 운영 검증·Stable Values 도입.

  • 출시: 2025-09 LTS (2030-09까지 지원)
  • 주요: Pattern Matching, String Templates, Stable Values
  • 대부분 라이브러리 호환 OK
  • Spring Boot 5+, Quarkus 4+ 모두 25 지원

1. Pattern Matching for switch — 정식

// 이전 — instanceof + cast
Object obj = ...;
String result;
if (obj instanceof Integer i) {
    result = "int: " + i;
} else if (obj instanceof String s) {
    result = "str: " + s;
} else {
    result = "unknown";
}

// Java 25 — switch pattern
String result = switch (obj) {
    case Integer i -> "int: " + i;
    case String s when s.length() > 5 -> "long str: " + s;
    case String s -> "str: " + s;
    case null, default -> "unknown";
};

2. Record Patterns

record Point(int x, int y) {}
record Line(Point start, Point end) {}

Object obj = new Line(new Point(1, 2), new Point(3, 4));

// Destructuring
switch (obj) {
    case Line(Point(int x1, int y1), Point(int x2, int y2)) ->
        System.out.printf("(%d,%d) -> (%d,%d)%n", x1, y1, x2, y2);
    default -> { }
}

3. String Templates — 정식

String name = "Alice";
int age = 30;

// 이전
String s1 = "Hello, " + name + "! You are " + age + ".";
String s2 = String.format("Hello, %s! You are %d.", name, age);

// Java 25
String s3 = STR."Hello, \{name}! You are \{age}.";

// 표현식도 가능
String s4 = STR."Sum: \{1 + 2 + 3}, list: \{List.of(1, 2, 3)}";

// 안전한 SQL — 자동 escape
String sql = SQL."SELECT * FROM users WHERE id = \{userId}";
// SQL 처리기는 자동으로 prepared statement 사용

4. Stable Values

public class Server {
    // 지연 초기화 + thread-safe + 한 번만
    private final StableValue<Config> config = StableValue.of();
    
    public Config getConfig() {
        return config.computeIfUnset(() -> loadConfig());
        // 첫 호출만 loadConfig 실행, 이후 캐시
    }
}

이전 double-checked locking 패턴이 표준화. 가벼움 + thread-safe.

5. Compact Source Files (preview)

// Hello.java
void main() {
    println("Hello");
}

// 컴파일 없이 직접 실행
java Hello.java

스크립트 같은 가벼운 자바. 학습·prototype에 유용.

6. Virtual Threads — 25에서 안정화

// 1만 개 동시 작업
List<Future<String>> futures;
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    futures = IntStream.range(0, 10000)
        .mapToObj(i -> executor.submit(() -> fetchData(i)))
        .toList();
}

// I/O bound 작업에 폭발적 확장. CPU 비용 거의 없음.

7. ScopedValue — ThreadLocal 대체

final static ScopedValue<User> CURRENT_USER = ScopedValue.newInstance();

// 호출 시
ScopedValue.where(CURRENT_USER, user).run(() -> {
    // 이 스코프 안에서만 user 접근 가능
    process();
});

void process() {
    User u = CURRENT_USER.get();  // 자동 가져옴
}

Virtual Threads 친화. ThreadLocal보다 가볍고 명확.

8. Sealed Classes + Records (이미 21)

sealed interface Shape permits Circle, Square, Triangle {}
record Circle(double radius) implements Shape {}
record Square(double side) implements Shape {}
record Triangle(double base, double height) implements Shape {}

double area(Shape shape) {
    return switch (shape) {
        case Circle(var r) -> Math.PI * r * r;
        case Square(var s) -> s * s;
        case Triangle(var b, var h) -> b * h / 2;
        // sealed라 default 불필요 (모든 경우 처리)
    };
}

9. JFR (Java Flight Recorder)

# 실시간 프로파일링
java -XX:StartFlightRecording=duration=60s,filename=app.jfr -jar app.jar

# 분석
jfr print --events CPULoad app.jfr

운영 중인 JVM에 실시간 부착도 가능. Datadog APM 대안.

10. GC 선택

GC특징
G1 (default)균형형, 일반 워크로드
ZGC10ms 이하 일시정지, 큰 heap
ShenandoahZGC 대안, low-latency
Parallelthroughput 최대화 (CPU bound)
Generational ZGC (25)ZGC 개선판, 일반 워크로드도 적합

11. 마이그레이션 21 → 25

  1. Java 25 환경 준비 (Adoptium·Amazon Corretto)
  2. 의존성 점검 — Spring Boot 5+, Hibernate 6+
  3. preview 기능 비활성화 (Compact Source Files는 preview)
  4. JVM 옵션 점검 — 25에서 일부 변경
  5. JFR로 성능 회귀 측정

실측 — 21 vs 25

지표2125
Spring Boot 시작 시간3.2초2.6초
처리량 (REST API)baseline+8%
메모리 (idle)240MB220MB
p99 GC pause (G1)30ms22ms

자주 묻는 질문

21 LTS를 사용 중인데 25로?가능. 9월 정식, 6개월 안정화 후 운영 도입 권장. 지금은 dev·staging.

String Templates 보안 우려?SQL·HTML processor가 자동 escape. 일반 STR도 직접 SQL 만드는 게 아니면 안전.

17 LTS는 EOL?2026-09까지 무료 지원. 그 이후 Oracle은 유료, Adoptium·Corretto는 추가 5년 무료.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록