자바 8부터 17까지의 주요 변경사항에 대해 알아보자!
✅ Java 8 (2014년)
기점이 되는 LTS (Long Term Support) 버전. 지금도 많이 쓰임.
- 람다식 (Lambda Expression)
- 데이터베이스 질의 언어에서 표현식을 처리하는 것처럼 병렬 연산을 지원하는 스트림이라는 새로운 API를 제공
- 익명 함수 문법 도입. 함수형 프로그래밍 가능.
- 데이터베이스 질의 언어에서 고수준 언어로 원하는 동작을 표현하면, 구현(자바에서는 스트림 라이브러리가 이 역할을 수행)에서 최적의 저수준 실행 방법을 선택하는 방식으로 동작한다
- 에러를 자주 일으키는 멀티코어 CPU를 이용하는 것보다 비용이 훨씬 비싼 키워드 synchronized를 사용하지 않아도 된다.
- Stream API
- 컬렉션 처리 시 선언형 프로그래밍 가능.
- Optional 클래스
- NullPointerException 방지용 도구.
-
인터페이스의 default, static 메서드
- 새로운 Date/Time API (
java.time
)LocalDate
,LocalDateTime
,ZonedDateTime
등
✅ Java 9 (2017년)
- 모듈 시스템 (Project Jigsaw)
- 애플리케이션을 모듈 단위로 쪼갤 수 있음.
- JShell
- 자바 REPL 지원. 인터랙티브 개발 가능.
- Stream API 개선 (
takeWhile
,dropWhile
,iterate
)
✅ Java 10 (2018년)
var
키워드 도입- 지역 변수 타입 추론 가능
1
var name = "abc"; // String으로 추론
- GC 개선: G1 기본 GC
✅ Java 11 (2018년) — LTS 버전
-
var
를 람다 파라미터에도 사용 가능 -
HttpClient 정식 지원 (
java.net.http
) -
String API 추가 (
isBlank()
,lines()
,strip()
,repeat()
등) -
Files.readString()
/writeString()
간단한 파일 IO 지원
✅ Java 12~14 (2019~2020년)
- Switch Expressions (프리뷰 - 정식)
yield
키워드로 표현식 반환 가능
1
2
3
4
5
int result = switch (day) {
case MONDAY -> 1;
case TUESDAY -> 2;
default -> throw new IllegalStateException();
};
- Text Blocks (
"""
) — Java 13 프리뷰, 15 정식 도입
✅ Java 15~16
- Records (데이터 클래스)
- 불변 객체를 한 줄로 선언 가능
1
record Person(String name, int age) {}
- Pattern Matching (프리뷰)
instanceof
조건문 간결하게 가능
✅ Java 17 (2021년) — LTS 버전
현재까지 가장 안정적인 LTS 버전 중 하나, Spring 3.x 기본 지원 버전.
- Sealed Classes (제한된 상속)
- 상속 가능한 클래스를 명시적으로 제한
1
sealed interface Shape permits Circle, Square {}
-
Pattern Matching for
instanceof
정식 채택 -
JEP 356: 향상된 Pseudo-Random Number Generator API
-
JEP 382: 새로운 macOS 렌더링 파이프라인
🚀 마무리 요약
| 버전 | 주요 특징 |
|——|———–|
| Java 8 | 람다, 스트림, Optional, 날짜 API |
| Java 9 | 모듈 시스템 |
| Java 10 | var
타입 추론 |
| Java 11 | HttpClient, String API 개선 |
| Java 13~14 | 텍스트 블록, switch 표현식 |
| Java 16 | Record, Pattern Matching |
| Java 17 | Sealed Class, 안정된 LTS |
Reference
모던 자바 인 액션