우테코 프리코스 전, JDK 21과 다른 Java 버전들 비교해보기

WonJun Jeon·2025년 10월 15일
1

우테코 프리코스를 시작하기에 앞서 처음 사용해보는 JDK 21.. 그러다보니 여러 JDK의 차이가 궁금해져서 정리해봅니다.

간단한 테스트라면 크게 상관 없지만 나중에 개인프로젝트나 실무에서 JDK를 선정할 때는 아래와 같이 다양한 요소를 고려해야 합니다.

  • 프로젝트의 안정성: 선택한 JDK가 충분히 검증되었고 안정적으로 동작하는지.
  • 지원 기간 (LTS): 장기 지원 버전(LTS, Long-Term Support)인지 여부.
  • 성능: 해당 JDK 버전의 성능 개선 및 최적화 정도.
  • 호환성: 기존 시스템 및 라이브러리와의 호환성.
  • 커뮤니티 및 생태계: 해당 버전을 사용하는 개발자 커뮤니티의 활성도.

JDK 버전 점유율

JetBrains에서 발표한 조사를 보면 Java언어를 이용하는 개발자분들께서 주로 사용하는 버전은 JDK 8입니다.
하지만 시간이 지남에 따라 JDK 11, 17 버전이 증가하는 추세고, JDK 8은 감소하는 추세로 나타납니다.

자바 버전별 차이는 뭐가 다를까?

JDK 버전별 주요 차이점은 성능 개선, 새로운 기능 추가, 보안 취약점 해결입니다.

JDK 8 (2014년 릴리즈)

Java 8은 자바 역사상 가장 큰 변화를 가져온 버전 중 하나로 평가받습니다.

  • 람다 표현식 (Lambda Expressions): 함수형 프로그래밍 스타일을 지원하여 코드를 간결하게 작성할 수 있게 합니다.
  • 스트림 API (Stream API): 대용량 데이터 컬렉션을 선언적으로 효율적으로 처리하는 기능을 제공합니다.
  • 새로운 날짜 및 시간 API: java.time 패키지를 통해 직관적이고 불변(immutable)적인 날짜와 시간 처리를 가능하게 합니다.
  • 디폴트 메소드 (Default Methods): 인터페이스에 기본 구현을 가진 메소드를 정의할 수 있게 하여, 기존 인터페이스를 깨뜨리지 않고 기능을 확장할 수 있습니다.

JDK 11 (2018년 릴리즈, LTS)

Java 11은 LTS 버전으로, 여러 기능 강화와 함께 새로운 GC가 도입되었습니다.

  • 컬렉션 팩토리 메소드 강화: List, Set, Map 인터페이스에 불변(immutable) 컬렉션을 생성할 수 있는 새로운 팩토리 메소드(of())가 추가되었습니다.
  • ZGC (Z Garbage Collector) 추가: 매우 낮은 일시 정지 시간(latency)을 목표로 하는 새로운 가비지 컬렉터가 도입되어 대용량 메모리 환경에서 유용합니다.
  • Reactive Streams: 논블로킹 백프레셔(backpressure)를 이용한 비동기 스트림 처리 지원 API가 추가되었습니다.
  • 로컬 변수 타입 추론 'var': var 키워드를 사용하여 지역 변수의 타입을 추론하게 함으로써 코드가 더욱 간결해졌습니다.
  • 신규 문자열 메소드: isBlank(), lines(), strip(), stripLeading(), stripTrailing(), repeat() 등 문자열 처리 메소드가 추가되어 편의성을 높였습니다.

JDK 17 (2021년 릴리즈, LTS)

Java 17은 최신 LTS 버전으로, 생산성 향상을 위한 여러 기능이 추가되었습니다.

  • 텍스트 블록 (Text Blocks): 여러 줄 문자열을 쉽게 작성할 수 있는 기능으로, 가독성 높은 SQL 쿼리나 HTML/JSON 문자열 등을 표현할 때 유용합니다.
  • 레코드 클래스 (Records): 데이터를 저장하는 불변(immutable) 객체를 간결하게 정의할 수 있는 새로운 유형의 클래스입니다. toString(), equals(), hashCode() 메소드를 자동으로 제공합니다.
  • instanceof 패턴 매칭 (Pattern Matching for instanceof): instanceof 연산자와 함께 변수 선언을 통해 캐스팅 없이 바로 사용 가능하게 되어 코드를 더 깔끔하게 만듭니다.
  • 벡터 API (Vector API) (Incubator): CPU에서 고성능 벡터 연산을 위한 API가 도입되어 특정 연산의 성능을 크게 향상시킬 수 있습니다.

JDK 21 (2023년 릴리즈, LTS)

우테코 프리코스에서 사용하는 JDK 21은 가장 최신의 LTS 버전으로, 동시성과 데이터 처리 효율성에서 혁신을 가져왔습니다.

  • 가상 스레드 (Virtual Threads) 도입: JVM이 관리하는 경량 스레드로, 기존 플랫폼 스레드 대비 메모리 사용량이 현저히 적고 생성 비용이 매우 저렴합니다. 동시성 처리 모델을 혁신적으로 개선합니다.
  • 레코드 패턴 (Record Patterns)과 패턴 매칭: 레코드와 패턴 매칭을 조합하여 복잡한 데이터 구조의 해체 및 처리를 더욱 간결하고 안전하게 할 수 있도록 돕습니다.
  • 문자열 템플릿 (String Templates) (Preview): 문자열 보간(interpolation)을 안전하고 효율적으로 처리하는 새로운 방법을 제공하여 문자열 조작을 간소화합니다.
  • 시퀀스드 컬렉션 API (Sequenced Collections API): SequencedCollection, SequencedSet, SequencedMap 인터페이스를 통해 컬렉션의 첫 번째 및 마지막 요소에 쉽게 접근하고, 순서를 유지하는 컬렉션에 대한 공통적인 기능을 제공합니다.
  • HTTP 클라이언트 기능 강화: 비동기 처리 성능이 개선되었고, 새로운 인증 방식들이 추가되어 더욱 강력한 웹 통신 기능을 제공합니다.
  • Generational ZGC 도입: 대용량 메모리 환경에서 ZGC의 가비지 컬렉션 성능을 더욱 향상시켜, 일시 정지 시간을 최소화합니다.

버전별 핵심 특징 요약

JDK 버전주요 특징 1 (가장 핵심)
JDK 8람다 표현식, 스트림 API, 새로운 날짜/시간 API
JDK 11var 타입 추론, ZGC, 컬렉션 팩토리 메소드
JDK 17텍스트 블록, 레코드 클래스,instanceof 패턴 매칭
JDK 21가상 스레드, 레코드 패턴, 문자열 템플릿 (Preview), Sequenced Collections API

내 생각

JDK 21은 가상 스레드와 같은 개발자 편의성을 크게 높이는 기능들을 도입한, 분명 혁신적인 LTS 버전입니다. 이러한 신기능들은 현대적인 애플리케이션 개발에 큰 도움이 될 것으로 보입니다.

우테코가 JDK 21로 개발 생태계를 전환했다면, 이는 개발자로서 새로운 기능을 적극적으로 학습하고 도입 방향을 고민해 볼 좋은 기회라고 생각합니다.

다만, 새로운 버전의 도입은 충분한 학습과 테스트가 선행되어야 한다고 생각합니다. 아직 많은 팀에서 JDK 8이나 11과 같은 레거시 코드를 사용하고 있음을 고려할 때, 제가 JDK 21에만 익숙해진다면 향후 코드 작성 시 호환성 문제를 겪을 수도 있다는 점을 염두에 두어야 할 것 같습니다.


참고 사이트

profile
안녕하세요. 앞으로 나아가는 개발자, 전원준입니다.

0개의 댓글