Java Versions

Jake·2022년 4월 6일
0

Java

목록 보기
6/8
post-custom-banner

출처 : Java Versions and Features

1. JRE와 JDK

  • JRE : Java Runtime Environment
  • JDK : Java Development Kit

옛날에는 Java 프로그램을 실행하고 싶으면, JRE만 다운받았습니다. JRE 안에는 JVM이 포함되어 있었고, 바로 이 JVM이 Java 프로그램을 운영체제에서 실행시킬 수 있도록 해주었던 것이죠.

Java로 개발을 하기 위해서는 JDK를 다운받아야 했습니다. JDK 안에는 JRE가 갖는 모든 것들이 포함되어 있었고, 여기에 java compiler, javadoc, java debugger 등이 포함되어 있었습니다. 이 때 JRE는 JDK와 완전히 별개의 폴더에 구분되어 있었습니다.

하지만 이제는 조금 다릅니다.
Java 8까지는 위와 같이 JRE, JDK를 나누어 다운받을 수 있도록 Oracle 웹사이트가 지원했습니다. 하지만 Java 9부터는 JDK 다운로드로 통합되었고, JRE도 더이상 별개의 폴더에 구분되어있지 않게 되었습니다.

따라서, 현재는 Java와 JDK가 거의 같은 말이 되었습니다


2. Java Distribution

1_ The OpenJDK project

  • Java source code (JRE, JDK의 소스코드)입니다.
  • 빌드되지 않은 날 것 그대로의 코드입니다.
  • 우리는 이 코드를 가져다가 마음대로 빌드해서 사용할 수 있지만, 그 동작의 신뢰성은 보장할 수가 없습니다. 때문에 오라클과 같은 기업들이 Java version들을 관리하면서 배포하고, 우리는 기업들이 배포한 빌드를 믿고 가져다가 쓰는 것입니다.

2_ OpenJDK builds

  • from Oracle
  • 무료!
  • 상위 버전이 공개되면 하위 버전에 대한 유지보수를 제공하지 않음

3_ OracleJDK builds

  • also from Oracle
  • commercial use의 경우, license가 있습니다. 즉, 무료가 아닙니다!
  • 상위 버전이 릴리즈 되어도 Oracle로부터 현재 사용하고 있는 버전에 대한 지원을 받을 수 있습니다

이외에도 Adoptium, Azul Zulu, Amazon Corretto, SAPMachine 등등 다양한 JDK들이 존재합니다.


3. Java Versions

Java 8

  • Java 7로부터 긴 시간이 흐른 뒤에 공개되었고, 어마어마하게 많은 변경들이 이루어진 버전입니다.

  • 그 중에서도 가장 큰 변화는 2가지 정도가 있었습니다.

    1) 람다

    • 객체 지향의 세계였던 자바에 함수형 프로그래밍이 도입된 첫 버전이 바로 Java 8입니다.
    • Java가 왜 함수형 프로그래밍을 도입하게 되었는지, 함수형 프로그래밍이 갖는 장점들에 대해서는 다음에 자세히 다뤄볼 예정입니다.

    2) Streams

    • functional-style이 Java에 도입되면서 Streams API도 함께 도입되었습니다.
    • 기존에는 루프문으로 해결해야했던 문제들이 Streams API를 통해 해결할 수 있게 되었습니다.

Java 9

  • Collections.of()가 추가되었습니다.
  • Optional이 자바에 등장했습니다.
  • Interface가 private method를 가질 수 있게 되었습니다.
  • JShell이 추가되었습니다.
  • HTTPClient가 Java의 built-in HTTP support로 등장했습니다.

Java 10

  • local variable type inference, var를 사용할 수 있게 되었습니다.

Java 11

  • String 클래스에 메서드가 몇가지 추가되었습니다 (isBlank, lines, strip)

Java 12

  • Unicode 11을 지원하게 되었습니다.

Java 13

  • switch문에 람다식을 사용할 수 있게 되었습니다.
  • Multiline String이 가능하게 되었습니다.

Java 14

  • switch문의 람다식 사용이 표준화 되었습니다(standardized)
  • Records가 도입되었습니다.
  • NullPointExceptions가 정확히 어느 변수에서 터진건지 드디어 알 수 있게 되었습니다.
  • Pattern Matching for instanceOf가 도입되었습니다. (타입 캐스팅의 번거로움 감소)
  • GC에 변경사항이 생겼습니다.

Java 15

  • Java 13에서 도입되었던 Text-Blocks / Multiline Strings가 production - ready해졌습니다.
  • Sealed classes가 도입되었습니다.

Java 16

  • 이전 버전에서 도입되었던 Records, Pattern
    Matching이 production - ready해졌습니다.

Java 17

  • Java 11 이후로 등장한 새로운 LTS(Long-Term-Support) 버전 릴리즈입니다.
  • switch문에서 패턴 매칭이 도입되었습니다.
  • Sealed classes가 finalized 되었습니다.
profile
Java/Spring Back-End Developer
post-custom-banner

0개의 댓글