JAVA

JAVA의 버전별 변화(JAVA SE 10 ~ 15)

Hangyu_Choi 2020. 11. 30. 23:17

저번 포스팅에 이어서 이후 버전별 변화에 대해 알아보겠습니다.
1. JAVA SE 10

2018년 3월 20일 발표된 버전입니다. 일반 지원은 2018년 9월에 종료되었습니다. var 키워드를 이용한 지역 변수 타입 추론, 병렬 처리 가비지 컬렉션, 개별 스레드로 분리된 Stop-The-World, 루트 CA 목록 등이 추가되었습니다. 또한 JDK의 레포지토리가 하나로 통합되었으며, JVM 힙 영역을 시스템 메모리가 아닌 다른 종류의 메모리에도 할당할 수 있게 되었습니다. 실험 기능으로 Java 기반의 JIT 컴파일러가 추가되었고, 이전 버전에서 Deprecated 처리된 API는 Java SE 10에서 모두 삭제되었습니다.

 

2. JAVA SE 11

2018년 9월 25일 발표된 버전입니다. 일반 지원은 2023년 9월, 연장 지원은 2026년 9월에 종료될 예정입니다. 이클립스 재단으로 넘어간 Java EE가 JDK에서 삭제되고, JavaFX도 JDK에서 분리되어 별도의 모듈로 제공됩니다. Gloun이라는 업체가 JavaFX를 유지보수 중이므로 이곳에서 다운로드하면 됩니다. 람다 파라미터에 대한 지역 변수 문법, 엡실론 가비지 컬렉터, HTTP 클라이언트 표준화 등의 기능이 추가되었습니다.

 

가장 커다란 변화는 바로 라이선스 부분입니다. Java SE 11부터 Oracle JDK의 독점 기능이 오픈 소스 버전인 OpenJDK에 이식됩니다. 이는 다시 말해 Oracle JDK와 OpenJDK가 완전히 동일해진다는 뜻입니다. Oracle JDK는 Java SE 11부터 LTS(장기 지원) 버전으로 3년마다 출시되는데, 출시 후 5년 동안 오라클의 기술 지원이 제공되고 최대 3년까지 지원 기간을 연장할 수 있습니다. Oracle JDK는 이제 3년에 한 번 출시되니 자바의 실질적인 버전 업을 담당하는 것은 OpenJDK가 된 셈이죠. OpenJDK는 기업들을 위한 기술 지원은 없고, 새로운 버전이 나오면 이전 버전에 대한 마이너 업데이트와 보안 업데이트는 중단됩니다.

 

그리고 Java 11과 함께 발표된 또 다른 소식은 바로 Oracle JDK가 구독형 유료 모델로 전환된다는 점입니다. 2019년 1월부터 오라클이 제공하는 모든 Oracle JDK는 유료화되며, 구독권을 구입하지 않으면 Oracle JDK에 접근 자체가 금지됩니다. 기존의 일반/연장 지원 서비스는 구독권에 포함되므로 별도의 서비스로는 제공되지 않습니다. 개인 사용자는 2021년 1월부터 비용을 지불해야 합니다. 이 때문에 많은 기업들이 Oracle JDK에서 발을 빼고 있으며, OpenJDK를 기반으로 한 다른 서드파티 JDK가 대안으로 떠오르고 있다. 대표적인 예로 Azul Systems에서 개발한 Zulu JDK가 있는데, Zulu JDK는 오라클의 TCK(Technology Certification Kit) 인증을 받은 구현체입니다. 개인과 기업 모두 무료로 사용할 수 있고, 기술 지원에 한해서만 유료 서비스가 제공됩니다. 또 다른 대안으로는 AdoptOpenJDK가 있는데, AdoptOpenJDK는 HotSpot VM 대신 Eclipse OpenJ9를 탑재한 버전도 같이 제공하고 있습니다. 다만 아직 TCK 인증을 받지 않았기에 주의가 필요합니다.

 

3. JAVA SE 12

2019년 3월 19일 공개된 버전입니다. 특징 중 하나로 문법적으로 Switch문을 확장한 것이 있습니다.

switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}

예전에는 이렇게 써야 했던 Switch문을 아래와 같은 형식으로도 쓸 수 있게 되었습니다.

 

switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}

이외에 가비지 컬렉터 개선, 마이크로 벤치마크 툴 추가, 성능 개선의 변경점이 있습니다.

 

4. JAVA SE 13

2019년 9월 17일 공개된 버전입니다. java 12에서의 스위치 개선을 이어 yield 라는 예약어가 추가되었습니다.

var a = switch (day) {
    case MONDAY, FRIDAY, SUNDAY:
        yield 6;
    case TUESDAY:
        yield 7;
    case THURSDAY, SATURDAY:
        yield 8;
    case WEDNESDAY:
        yield 9;
};

 

5. JAVA SE 14

2020년 3월 18일 공개된 버전입니다. 프리뷰 기능으로 instanceof의 패턴 매칭과 record라는 데이터 오브젝트 선언이 추가되었습니다. 그 외에 인큐베이터라는 패키징 툴(OS에 맞춘 실행파일 생성 기능) 추가 등이 있습니다.

instanceof 패턴 매칭

if (!(obj instanceof String s)) {
    .. s.contains(..) ..
} else {
    .. s.contains(..) ..
}


record 타입 지원

record Point(int x, int y) { }

 

6. JAVA SE 15

2020년 9월 15일 공개된 버전입니다. (한국 기준 9월 16일)

  • EdDSA 암호화 알고리즘 추가

  • 패턴 매칭 (2차 미리 보기, 상단 Java 14 참조)

  • 스케일링 가능한 낮은 지연의 가비지 컬렉터 추가(ZGC)

  • Solaris 및 SPARC 플랫폼 지원 제거

  • 외부 메모리 접근 API (인큐베이팅)

  • 레코드 (2차 미리보기, 상단 Java 14 참조)

  • 클래스 봉인 (미리 보기)

    상속 가능한 클래스를 지정할 수 있는 봉인 클래스가 제공됩니다.
    상속 가능한 대상은 상위 클래스 또는 인터페이스 패키지 내에 속해 있어야 합니다.

package wiki.namu.example.species;

public sealed class Animal
       Dog,
	   wiki.namu.example.species.india.Monkey,
	   wiki.namu.example.species.sabana.Leopard
{
    // ...
}
  • 다중 텍스트 블록

이제 자바에서도 여러 줄의 문자열을 손쉽게 작성할 수 있습니다.

String html = """
              <html>
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;

 

 

저번 포스팅에 이어, 이번 포스팅에서도 자바의 버전별 변화에 대해 알아봤습니다.

제가 버전별 변화에 대해 포스팅 한 이유는

개발자는 항상 최신 유행에 대해 민감해야 하기 때문입니다.

예전 기술들을 쓰고 있다가, 해당 기술 지원이 불가능해지면 어떻게 대처할 수 있는지에 대한 부분을 발 빠르게 대처할 수 있는 개발자가 좋은 개발자라고 생각합니다.

 

오늘은 이 정도로 마치고, 다음 포스팅은 아마 자바가 아닌 다른 포스팅을 준비해 올 것 같습니다. 감사합니다:)