티스토리 뷰

DEV/JAVA

자바, 버전별 주요 특징 및 변화

초록매실원액 2025. 7. 15. 13:11
버전 출시 연도 주요 특징 및 변화
Java 1.5 (Tiger) 2004
  • 제네릭 (Generics): 타입 안전성 강화, 캐스팅 불필요
  • 향상된 For 루프 (For-each loop): 컬렉션/배열 순회 간소화
  • 오토박싱/언박싱 (Autoboxing/Unboxing): 기본 타입과 래퍼 클래스 간 자동 변환
  • 열거형 (Enums): 타입 안전한 상수 집합 정의
  • 어노테이션 (Annotations): 메타데이터 추가 기능
  • 가변 인자 (Varargs): 가변 개수의 인자 전달
  • 정적 임포트 (Static Import): 정적 멤버 직접 임포트
Java 6 (Mustang) 2006
  • 성능 개선: JVM 및 컴파일러 최적화
  • 웹 서비스 지원 강화: JAX-WS, JAXB 2.0
  • JDBC 4.0 지원: 자동 드라이버 로딩 등
  • 스크립팅 언어 지원: JavaScript (Rhino) 연동
Java 7 (Dolphin) 2011
  • Project Coin:
    • switch 문에서 String 사용 가능
    • 이진 리터럴, 숫자 리터럴에 밑줄 사용
    • Try-with-resources: 자원 자동 해제
    • Multi-catch: 여러 예외 한 번에 처리
    • 다이아몬드 연산자 (`<>`): 타입 추론 개선
  • NIO.2: 새로운 파일 시스템 API
Java 8 (LTS) 2014
  • 람다 표현식 (Lambda Expressions): 함수형 프로그래밍 도입
  • Stream API: 컬렉션 데이터 처리 간소화 및 효율화
  • 인터페이스의 디폴트 메서드: 하위 호환성 유지하며 인터페이스 확장
  • Optional 클래스: NullPointerException 방지
  • 새로운 날짜/시간 API (java.time): 개선된 날짜/시간 처리
Java 9 2017
  • 모듈 시스템 (JPMS - Project Jigsaw): JDK 모듈화, 유지보수성/보안/성능 향상
  • JShell (REPL): 대화형 자바 코드 실행 환경
  • 인터페이스의 private 메서드: 인터페이스 내 유틸리티 메서드 정의
  • 불변 컬렉션 팩토리 메서드: List.of(), Set.of()
  • Stream API 개선 (takeWhile, dropWhile 등)
Java 10 2018
  • 지역 변수 타입 추론 (`var`): 코드 간결화
  • G1 GC의 병렬 전체 GC
  • 애플리케이션 클래스 데이터 공유 (CDS)
Java 11 (LTS) 2018
  • HTTP Client (표준화): HTTP/2 지원
  • 람다 파라미터에 `var` 사용 가능
  • 새로운 String 메서드 (isBlank(), lines() 등)
  • Files.readString(), Files.writeString()
  • ZGC (실험적), Epsilon GC 도입
  • Java EE 및 CORBA 모듈 제거
Java 12 2019
  • Switch 표현식 (미리보기): switch 문이 값을 반환 가능
  • Shenandoah GC (실험적)
Java 13 2019
  • Switch 표현식 (두 번째 미리보기): yield 키워드 도입
  • 텍스트 블록 (미리보기): 여러 줄 문자열 리터럴 간소화
  • 동적 CDS 아카이브
Java 14 2020
  • 레코드 (Records - 미리보기): 불변 데이터 클래스 간결하게 선언
  • instanceof를 위한 패턴 매칭 (미리보기): 타입 체크 및 캐스팅 간소화
  • 텍스트 블록 (표준화)
  • Switch 표현식 (표준화)
  • 유용한 NullPointerException 메시지
Java 15 2020
  • 봉인된 클래스 (Sealed Classes - 미리보기): 상속/구현 제한
  • 레코드 (두 번째 미리보기)
  • ZGC, Shenandoah GC (표준화)
  • Nashorn JavaScript 엔진 제거
Java 16 2021
  • 레코드 (표준화)
  • instanceof를 위한 패턴 매칭 (표준화)
  • 봉인된 클래스 (두 번째 미리보기)
  • Vector API (인큐베이터)
  • 패키징 도구 (jpackage)
Java 17 (LTS) 2021
  • 봉인된 클래스 (표준화)
  • switch를 위한 패턴 매칭 (미리보기): switch 문/표현식에 패턴 매칭 적용
  • 외부 함수 및 메모리 API (인큐베이터)
  • JDK 내부의 강력한 캡슐화
Java 18 2022
  • 기본 UTF-8 인코딩
  • 간단한 웹 서버
  • Javadoc에 코드 스니펫 포함
  • switch를 위한 패턴 매칭 (두 번째 미리보기)
Java 19 2022
  • 가상 스레드 (Virtual Threads - 미리보기): 경량 스레드, 고처리량 동시성 애플리케이션 개발 용이
  • 레코드 패턴 (Record Patterns - 미리보기): 레코드 값 분해
  • 구조화된 동시성 (인큐베이터)
Java 20 2023
  • 스코프드 값 (Scoped Values - 미리보기): 스레드 간 불변 데이터 공유 메커니즘
  • 레코드 패턴 (두 번째 미리보기)
  • 가상 스레드 (두 번째 미리보기)
Java 21 (LTS) 2023
  • 가상 스레드 (표준화)
  • 시퀀스드 컬렉션 (Sequenced Collections): 순서가 정의된 컬렉션 인터페이스
  • 레코드 패턴 (표준화)
  • switch를 위한 패턴 매칭 (표준화)
  • 문자열 템플릿 (미리보기)
  • 이름 없는 패턴 및 변수 (미리보기)
  • 이름 없는 클래스 및 인스턴스 메인 메서드 (미리보기)
  • 세대별 ZGC
Java 22+ 2024~
  • 이후 버전들도 새로운 기능과 개선점 지속 추가 (비-LTS 릴리스)
  • 이전 버전의 미리보기/인큐베이터 기능 표준화 진행

그래서, 어떤 자바 버전을 사용해야 할까요?

자바는 6개월마다 새로운 버전이 출시되는 빠른 주기를 가지고 있습니다. 하지만 모든 프로젝트가 최신 버전을 따라갈 필요는 없습니다. 중요한 것은 프로젝트의 요구사항과 안정성, 그리고 장기적인 지원 여부를 고려하는 것입니다.

  • LTS (Long Term Support) 버전: Java 8, 11, 17, 21과 같이 장기 지원이 제공되는 버전은 안정성과 유지보수 측면에서 유리합니다. 기업 환경에서는 주로 LTS 버전을 사용합니다.
  • 비-LTS 버전: 최신 기능을 빠르게 도입하고 싶거나, 개인 프로젝트/실험적인 개발을 할 때 유용합니다. 하지만 6개월마다 새로운 버전으로 업데이트해야 하는 부담이 있습니다.

새로운 프로젝트를 시작한다면, 현재 가장 최신 LTS 버전인 Java 21을 고려하는 것이 좋습니다. 기존 프로젝트의 경우, 마이그레이션 비용과 얻을 수 있는 이점을 신중하게 저울질하여 버전을 업그레이드할지 결정해야 합니다.

자바는 앞으로도 계속해서 발전하며 개발자들에게 더 나은 경험을 제공할 것입니다. 각 버전의 특징을 이해하고, 여러분의 개발 환경에 가장 적합한 자바 버전을 선택하는 현명한 개발자가 되시길 바랍니다!

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함