Java - 8부터 17까지의 변화

자바는 어떤 세월을 쌓아왔나?

Posted by Yan on April 18, 2025

자바 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

모던 자바 인 액션