ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] Java version 별 차이 ( 7, 8, 9, 11 )
    Computer Science 2023. 12. 12. 23:18

    java 7 - 다이아몬드 연산자 지원, switch 문에서 String 사용 가능

    java 8 - LTS 버전, Default Method, 람다 표현식, 함수형 Method, Optional 구조체, java.time 패키지, Stream API, GC 개선

    java 9 - Java Platform Module System ( jigsaw project ), G1 GC, HTTP/2

    java 11 - LTS 버전, HTTP/2 강화, 람다 표현식에 로컬 변수 타입 추론 추가


    java 7

    Java 7 부터 제네렉에서 사용하는 <> 오퍼레이터 ( 다이아몬드 연산자 ) 를 지원합니다.

    다이아몬드 연산자를 사용하면 코드를 간결하게 만들고 가독성을 향상시킬 수 있습니다.

    List<String> list = new ArrayList<String>(); // jdk 7 이전
    List<String> list = new ArrayList<>(); // jdk 7 이후

     

    switch 문에서 String 사용 가능

    기존에는 원시 자료형 또는 Enum 자료형만 사용 가능했지만 jdk 7 이후로는 String도 사용가능합니다.

     

    java 8

    LTS 버전 입니다. 8 버전에서 큰 변화가 일어났습니다.

     

    1. 인터페이스 ( interface ) 에서 Default Method

    본래 인터페이스에서는 메서드의 정의만 가능하고 구현은 불가능하였습니다. 하지만 jdk 8 이후부터는 default 메서드가 생겨났으며 기존 메서드와는 다르게 인터페이스에서 구현이 가능합니다.

    이로서 얻는 이득으로 가장 큰 것은 역호환성 유지입니다. 본래 기존 인터페이스에 새로운 메서드를 추가하려고 한다면 해당 인터페이스를 사용하는 다른 프로젝트와의 호환성 문제가 발생할 수 있습니다. 이를 default 메서드 사용을 통해 해결 할 수 있습니다.

     

    2. 람다 표현식, 함수형 인터페이스

    람다 표현식은 간결하게 익명 함수를 정의하고 전달하는 방식입니다.

    람다 표현식은 주로 함수형 인터페이스에서 사용되는데 함수형 인터페이스란 추상 메서드가 오직 하나인 인터페이스를 의미합니다. 따라서 default 메서드 또는 static 메서드가 여러개여도 상관이 없습니다.

     

    3. Optional 구조체

    기존에 NullPointerException 이슈를 효율적으로 대응하기 위해 Optional 구조체가 추가되었습니다.

     

    4. java.time 패키지

    기존의 java.util.Date 와 java.util.Calender 는 일관성, 정확성, 타임존 등의 문제점을 가지고 있었습니다. 이를 java.time 패키지 추가로 해결하였습니다.

     

    5. Stream API

    데이터를 처리하고 가공하는 데 편리한 Stream API 가 jdk 8 부터 도입되었습니다. Stream을 이용하면 코드를 간결하고 가독성 있게 작성하면서도 손쉽게 병렬 처리 작업을 할 수 있습니다.

     

    6. GC 성능 개선

    java 8 이전에는 PermGen 이라는 메모리 영역이 존재하였는데 클래스와 메타데이터 ( 메서드, 필드, 주석 등 ) 을 저장하는 공간이었습니다. 다만 문제는 이것이 고정된 크기여서 클래스 및 메타데이터의 크기가 동적으로 변화하더라도 확장 등이 일어나지 않았습니다. 이를 해결하기 위해 PermGen 영역이 삭제되고 Metaspace 영역 ( Natvice Memory )이 새로 생겨났으며 GC 대상이 되도록 변경하였습니다.

     

    java 9

    1. Java Platform Module System ( jigsaw project )

    기존에는 의존성 등이 명시적으로 정의되지 않았기에 클래스, 버전 충돌 등 문제가 있었습니다. 이를 해결하기 위해 도입된 프로젝트로 특징은 다음과 같습니다.

    - 모듈화

    애플리케이션을 독립적인 모듈로 나누고, 각 모듈은 자체적으로 의존성을 관리합니다.

    - 의존성 관리

    각 모듈은 의존성을 명시적으로 정의하고, 컴파일 타임 및 런타임에서 이러한 의존성을 체크합니다.

     

    2. G1 GC

    기본 GC가 Parallel GC 에서 G1 GC 로 변경 되었습니다.

     

    3. HTTP/2 지원

    java 9 에서 HTTP/2 프로토콜을 지원합니다.

     

    java 11

    LTS 버전입니다.

     

    1. HTTP/2 강화

    java 11에서 HTTP/2 지원이 강화되었습니다.

     

    2. 람다 표현식에서 로컬 변수 타입 추론 ( var )

    java 11에서 로컬 변수 타입 추론을 지원하는 var 키워드가 도입되었습니다.

Designed by Tistory.