Java 8부터 25까지 LTS 및 주요 기능 요약 (예제 포함)
· 4 min read
Java는 지속적인 릴리스를 통해 다양한 기능을 도입해왔으며, 그 중 일부 버전은 LTS(장기 지원)로 지정되어 안정적인 사용이 가능합니다. 이 글에서는 Java 8부터 25까지의 LTS 여부, 정식 기능 중심의 주요 변화, EOL 정보, 그리고 버전별 예제 코드를 함께 정리합니다.
📊 Java 버전 요약 (Java 8 ~ Java 25)
| 버전 | 출시일 | LTS | 주요 기능 (정식 도입 기준) | EOL (Oracle 기준) |
|---|---|---|---|---|
| Java 8 | 2014-03 | ✅ | Lambda, Stream API, java.time, Optional | 2022-12 (공개) |
| Java 9 | 2017-09 | ❌ | 모듈 시스템 (JPMS), JShell | 2018-03 |
| Java 10 | 2018-03 | ❌ | 지역 변수 타입 추론 (var) | 2018-09 |
| Java 11 | 2018-09 | ✅ | HTTP Client, 새로운 String/File API | 2026-09 |
| Java 13 | 2019-09 | ❌ | 텍스트 블록 (정식화 시작) | 2020-03 |
| Java 16 | 2021-03 | ❌ | Records (정식), instanceof 패턴 매칭 | 2021-09 |
| Java 17 | 2021-09 | ✅ | Sealed Classes, Switch 패턴 매칭 | 2029-09 |
| Java 18 | 2022-03 | ❌ | UTF-8 기본 인코딩 | 2022-09 |
| Java 21 | 2023-09 | ✅ | Virtual Threads, Sequenced Collections | 2031-09 |
| Java 24 | 2025-03 | ❌ | 주요 정식 기능 정보 없음 | 2025-09 예정 |
| Java 25 | 2025-09 예정 | ✅ | 값 클래스(Value Classes, 예정) | 2033-09 |
🧪 Java 주요 기능 예제
✅ Java 8 - Lambda & Stream API
List<String> names = Arrays.asList("Kim", "Lee", "Park");
names.stream().filter(n -> n.startsWith("K")).forEach(System.out::println);
✅ Java 9 - 모듈 시스템
module com.example.app {
requires java.base;
}
✅ Java 10 - var 지역 변수
var message = "Hello, Java 10!";
System.out.println(message);
✅ Java 11 - HTTP Client
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenAccept(System.out::println);
✅ Java 13 - 텍스트 블록
String html = """
<html>
<body>Hello</body>
</html>
""";
System.out.println(html);
✅ Java 16 - Record
public record User(String name, int age) {}
User user = new User("Alice", 30);
System.out.println(user.name());
✅ Java 17 - Sealed Class
public sealed class Shape permits Circle, Rectangle {}
final class Circle extends Shape {}
final class Rectangle extends Shape {}
✅ Java 18 - UTF-8 기본 인코딩
Files.write(Path.of("test.txt"), "안녕하세요".getBytes());
✅ Java 21 - Virtual Threads
Runnable task = () -> System.out.println("Running in " + Thread.currentThread());
Thread.startVirtualThread(task);
✅ 요약
- LTS 버전: 8, 11, 17, 21, 25 (예정)
- 예제 포함 버전별 기능 비교 가능
- 프리뷰/실험 기능 제외, 정식 기능 중심