[Java] 어떤 Java version을 써야 할까?

Updated:

현재 출시된 자바 버전 중에서 가장 널리 쓰이는 것은 8, 11 ,17 버전이다
왜 해당 버전들이 많이 사용되는지, 버전별 특징은 어떤 차이가 있는지 알아보자

8, 11, 17 버전이 선호되는 이유

LTS(Long-Term Support) 버전

LTS(Long-Term Support)란? 해당 소프트웨어에게 장기적인 지원을 보장하는 버전으로 비 LTS 릴리즈 버전들보다 업데이트와 보안& 버그수정이 지원되므로 안정적으로 사용 가능

  • LTS(Long-Term Support) 버전 : java 8 이전 버전, java 11 버전, java 17 버전
  • 비 LTS 릴리즈(자바 9, 자바 10, 자바 12, 자바 15 등)의 경우 6개월 동안만 지원 가능

버전별 지원 기간

java

8, 11, 17 버전별 특징

JAVA 8

  • 현재까지 가장 많이 사용되었던 버전으로 2030년까지 지원 기간 연장
  • 지속적인 기능 추가와 보안 => 가장 안정적
  • 32비트를 지원하는 마지막 버전(공식)
  • 다양한 오픈소스 & 사용 프로젝트가 Java 8을 지원하고 있으므로 개발에 편이

JAVA 11

java11

  • java 8 이후 새로운 표준 - 최근 가장 일반적으로 사용되는 버전
  • 새롭게 추가& 향상된 기능
    • 모듈
      • Java 클래스와 인터페이스 및 관련 리소스의 자동 기술 컬렉션
      • 애플리케이션에 필요한 구성 요소만 포함하는 런타임 구성을 사용자 지정 : 메모리를 더 적게 사용하며 효율적
      • 모듈이 내보내는 패키지와 필요한 구성 요소를 명시적으로 선언하고 반사적 액세스를 제한하여 강력한 캡슐화를 적용 가능 : 안전하고 유지관리가 편이해짐
    • 가비지 수집
      • G1GC(가비지 우선 가비지 수집기): 대기 시간과 처리량 간의 균형을 유지
    • **Docker 컨테이너 개산 사항 **
      • Java 10 이전에서는 컨테이너에서 설정된 메모리&CPU 제약조건을 JVM 에서 인식 못함 (JVM은 최대 힙 크기의 기본값 : 기본 호스트의 실제 메모리의 ¼)
      • Java 10 이후에서는 cgroup(컨테이너제어그룹)에 설정된 제약조건을 사용하여 메모리&CPU 제한 설정 가능
    • http client 기능 라이브러리 추가
      • HTTP/1.1 와 HTTP/2 를 지원하고, 동기, 비동기 프로그래밍가능

JAVA 17

  • 가장 최근 출시된 Java LTS(장기 지원) 버전
  • Java 17부터는 Oracle No-Fee Terms and Conditions (NFTC) 라이선스를 적용하여 배포
    • 기존의 Oracle Technology Network (OTN) 라이선스가 사용용도& 배포에 있어 제약조건이 있던 것에 비해 상업 및 프로덕션 용도를 포함하여, 모든 사용자들에게 무료로 사용 및 배포를 허용
  • Sealed Classes(봉인 클래)
    • 다른 클래스나 인터페이스에 의한 확장 및 구현을 제한
  • Pattern Matching for switch
    • witch Expressions를 사용하면 스위치에서 값을 반환하고 할당 등에서 이러한 반환 값을 사용 가능
  • Records
    • 레코드를 사용하면 변경할 수 없는 데이터 클래스를 만들 수 있

어떤 버전을 써야 할까 :

  • Java8 보다는 11, 17버전을 고민중
    • Java의 새로운 버전이 나올 수록 새 기능이 추가되고 사용성이 향상되고 있음
    • Java 8이 지원기간을 연장 받은 것처럼 Java 11, Java 17 또한 연장가능성이 없지 않음
  • 호환성 문제
    • 특히 17의 경우 아직 라이브러리 호환성이 좋지 못함
  • 사용해야하는 라이브러리의 호환성과 새로운 기능을 얼마나 사용할 것인지에 따라 결정 할 것

참고

Tags:

Categories:

Updated:

Leave a comment