자바 정복 일기 - Java 버전별 정리

Bex·2023년 8월 6일
1

1주차 자바 정복 일기에 기록할 내용은 다음과 같다.

1. JAVA 버전 별 정리

0. 들어가기 전

스프링 개발을 위해 Java를 많이 사용하였지만 Java 버전을 당연하게 최신 버전을 사용해왔던 것 같다. 따라서 이번 정리를 통해 각 버전별로 어떠한 차이점이 있고 발전해 왔는지 알아보고자 한다.

위 그림처럼 Java는 다양한 버전을 가지고 있다. 그리고 LTS가 붙은 버전들이 존재하는데 이는 Long Term Support로, 오랜 기간 지원하는 특별한 버전의 에디션이라는 의미를 가지고 대부분 LTS버전을 사용한다고 한다. 따라서 8, 11, 17버전이 다른 버전에 비해 긴 시간을 지원하기 때문에 대부분 Java8, 11, 17을 많이 사용한다!!!(여기서 Java8이 가장 김)

지금까지 왜 Java8, 11, 17이 가장 많이 사용되는지 이유를 알아보았고 그렇다면 Java 버전별 변화를 살펴보자

1. Java 8

  • 32bit를 지원하는 마지막 공식 Java 버전
  • Oracle JDK와 Open JDK로 나뉨
  • 새로운 날짜와 시간 API(LocalDataTime 등)이 추가
  • PermGen 영역 삭제
  • Static Link JNI Library
  • 람다식(Lambda) : 함수형 프로그래밍을 위한 람다식 추가
    List<String> list = Arrays.asList("리우", "망고", "벡스", "진로", "헤롱");
    list.forEach(str -> System.out.println(str));
  • Stream API : 컬렉션 처리를 위한 Stream API 추가
    List<String> list = Arrays.asList("리우", "망고", "벡스", "진로", "헤롱");
    long count = list.stream().filter(str -> str.length() > 5).count();
    System.out.println(count)
  • 메서드 참조 : 람다식을 더 간결하게 표현하는 메서드 참조 추가
    List<String> list = Arrays.asList("리우", "망고", "벡스", "진로", "헤롱");
    list.forEach(System.out::println);
  • Optional 클래스 : null 체크를 간편하게 도와주는 Optional 클래스 추가
    String str = null;
    Optional<String> optional = Optional.ofNullable(str);
    System.out.println(optional.isPresent());

2. Java 11

  • Oracle JDK와 Open JDK 통합
  • Oracle JDK가 구독형 유료 모델로 전환
  • Third Party JDK로의 이전 필요
  • HTTP 클라이언트 : HTTP/2를 지원하는 HTTP 클라이언트 추가
    // HttpClient를 사용하여 HttpRequest를 생성하고 HttpResponse를 받아오는 예제 코드
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
          .uri(URI.create("<https://www.example.com/>"))
          .build();
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println(response.body());
  • 지역 변수 문법 개선 : var 키워드로 로컬 변수를 선언할 때 초기화 구문이 없어도 가능
    var str = "Hello, World!";
    var list = Arrays.asList("리우", "망고", "벡스", "진로", "헤롱");

3. Java 17

  • 가장 최신 LTS 버전
  • 봉인 클래스(Sealed Class) 정식 추가
    • sealed 클래스의 경우 클래스의 상속 계층 구조를 미리 선언할 수 있도록 해준다.
    • 이를 통해 클래스의 확장성과 보안성을 높일 수 있다.
    • permits 키워드를 사용하여 각 하위 클래스를 정의한다.
      public sealed class Shape permits Circle, Rectangle, Triangle {
        // ...
      }
      final class Circle extends Shape {
        // ...
      }
      final class Rectangle extends Shape {
        // ...
      }
      non-sealed class Triangle extends Shape {
        // ...
      }
  • Pattern Matching for switch 업데이트(프리뷰 단계)
    • switch문에서 pattern matching을 사용할 수 있도록 지원
      public static void main(String[] args) {
        Object obj = "Hello, world!";
        if (obj instanceof String s && s.length() > 10) {
            System.out.println(s.toUpperCase());
        } else {
            System.out.println(obj);
        }
      }
  • Incubator (Foreign Function & Memory API) 업데이트
    • Foreign Function and Memory API에서는 새로운 기능이 추가되었다.
  • 난수 생성 API 추가
  • 애플 M1 및 이후 프로세서 탑재 제품군에 대한 정식 지원

참고 자료

[JAVA] JRE 와 JDK의 차이? Java 8, 11, 17 에 대하여

profile
초보 개발자의 코딩 일기

2개의 댓글

comment-user-thumbnail
2023년 8월 6일

개발자로서 배울 점이 많은 글이었습니다. 감사합니다.

답글 달기
comment-user-thumbnail
2023년 8월 6일

정리 잘하셧네용 잘보고갑니당~~!!

답글 달기