soowanlog

Java 버전 별 특징 본문

백엔드/Java

Java 버전 별 특징

개발자솬
백엔드/Java

Java 버전 별 특징

개발자솬 2024. 3. 7. 14:16
728x90
반응형

JDK 1.0

- 1996. 01 공개

- 발표 이전에 불린 이름은 Oak

JDK 1.1

- 1997. 02 공개

- JDBC, Inner Class, Java Beans, RMI, Reflection, Calendar, Unicode 지원 등이 추가

- Beans 규약

  1. 기본 생성자가 반드시 존재해야 함

  2. 모든 속성은 비공개

  3. 속성에 접근하고 꺼내올 수 있는 getter, setter 메서드를 구성

  4. Serializable을 구현

J2SE 1.2

- 1998. 12 공개

- Swing GUI, JIT, Collection Framework 등이 추가

- 이때부터 약칭을 J2SE(Java 2 Standard Edition)으로 표기

J2SE 1.3

- 2000. 03 공개

- HotSpot JVM, JNDI, JPDA, JavaSount 등이 추가

J2SE 1.4

- 2002. 02 공개

- 정규표현식, Assertion, IPv6, XML API 등이 추가

J2SE 5

- 2004. 09 공개

- Generics, Annotation, Concurrency API, Enumeration 등이 추가

- 이때부터 버전 표기에서 1을 빼기 시작

- Generics :

  기존 Collection Framework를 이용할 때 발생할 수 있는 ClassCastException을 컴파일 단계에서 검증할 수 있음.

  즉, 형변환 시 예외가 발생하는 것을 작성 중에 방지할 수 있다는 것

- Concurrency API :

  이 API를 통해 병렬 프로그래밍, 멀티 스레드를 쉽게 구현

- Enumeration :

  데이터 구조를 더 쉽게 정의하고 사용할 수 있는 열거체, 다음과 같이 사용

enum Vehicle {
    CAR,
    CRUSE
}

Java SE 6

- 2006. 12 공개

- JDBC 4.0, Java Compiler API, Pluggable Annotation 등이 추가

- 가비지 컬렉터 G1 GC를 오직 테스트용으로만 사용하도록 추가

- 이때부터 표기가 Java SE로 변경

Java SE 7 (LTS)

- 2011. 07 공개

- Diamnond Operator<> : General Class 초기화 시 Type Interface를 지원

// Java SE 7 이전
List<Integer> list = new ArrayList<Integer>();

// Java SE 7 이후
List<Integer> list = new ArrayList<>();

 

- switch문에서 String 사용 가능

- try 문에서 자동 자원 관리 (try-with-resources) : try() 내에 선언된 자원을 try가 종료될 때 자동으로 close 함

Java SE 8 (LTS)

- 2014. 03 공개

- Lambda Expression : 메서드로 전달할 수 있는 익명 함수를 단순화한 것

list.forEach(a -> System.out.println(a));

 

- Method Reference : Lambda Expression을 축약한 형태

list.forEach(System.out::println);

 

- Interface의 Default Method : Interface에 구현 내용을 포함한 메서드를 선언

public interface Car {
    default void move() {
        System.out.println("도로를 달립니다.");
    }
}

 

 - Optional : 값이 비어있음을 명시적을 표현할 수 있고 NullPointerException에 잘 대응할 수 있음

// 생성
Optional<String> car = Optional.of("자동차");
Optional<String> bicycle = Optional.of(null); // NullPointerException 발생
Optional<String> cruse = Optional.ofNullable(null);

// 추출
String sonata = car.orElse("자동차가 아닙니다.");
String avante = cruse.orElse("유람선이 아닙니다.");

// 확인
System.out.println(sonata); // 자동차 출력
System.out.println(avante); // 유람선이 아닙니다. 출력

 

- Stream API : Stream은 선언형으로 컬렉션 데이터를 처리할 수 있음

Java SE 9

- 2017. 09 공개

- Project Jigsaw 기반으로 런타임이 모듈화 됨

- Jigsaw 모듈 시스템

module java.sql {
    requires public java.logging;
    requires public java.xml;
    exports java.sql;
    exports javax.sql;
    exports javax.transaction.xa;
}

 

  Jigsaw의 이점

    1. 편하고 효율적인 Java 개발 환경을 만듦

    2. Jar 기반 모노리틱 방식을 개선하여 모듈 지정 및 모듈별 버전 관리 기능이 가능

    3. 필요한 모듈만 구동하여 크기와 성능 최적화가 가능

    4. 임베디드와 같은 환경에서 필요한 모듈만 탑재되어 적은 메모리로 로딩이 가능

- Interface의 Private Method : Interface 내에서 private method 사용 가능

interface Car {
    private static String stop() {
        return "멈춥니다.";
    }
    private String run() {
        return "도로를 달립니다.";
    }
}

Java SE 10

- 2018. 03 공개

- var 키워드를 이용한 지역 변수 타입 추론

- 병렬 처리 GC

Java SE 11 (LTS)

- 2018. 09 공개

- String Class에 새로운 메서드 추가

- Collection Interface에 toArray() 메서드 추가

- var는 초기값이 있는 지역변수로만 선언이 가능했지만, 람다식에서 var을 사용할 수 있음

- javac을 통해 컴파일 하지 않고도 바로 java파일 실행 가능

// java 11 이전
$ javac Test.java
$ java Test
Hello World!

// java 11 이후
$ java Test.java
Hello World!

Java SE 12

- 2019. 03 공개

- GC 개선

- Unicode 11 지원

Java SE 13

- 2019. 09 공개

- switch 문에 yield 예약어 추가

Java SE 14

- 2020. 03 공개

- switch 문 표현 확장

// java 14 이전
switch(vehicle) {
    case CAR:
    case BICYCLE:
        System.out.println("육상");
        break;
    case CRUSE:
    case BOAT:
        System.out.println("수상");
        break;
    case AIRPLANE:
        System.out.println("공중");
        break;
}

// java 14 이후
switch(vehicle) {
    case CAR, BICYCLE -> System.out.println("육상");
    case CRUSE, BOAT -> System.out.println("수상");
    case AIRPLANE -> System.out.println("공중");
}

 

- NullPointerException 발생 시 어떤 변수가 null인지 설명

Java SE 15

- 2020. 09 공개

- 다중 텍스트 블록(Multiline String)

String sql = """
             SELET *
             FROM vehicle
             """;

Java SE 16

- 2021. 03 공개

- instanceof : Object에서 component의 조건부 추출을 더 간결하고 안전하게 표현 가능

// java 16 이전
@Override
public boolean equals(Object obj) {
    if (obj instanceof Vehicle) {
        Vehicle vehicle = (Vehicle) obj;
        if (this.vehicleCode == vehicle.vehicleCode) return true;
        else return false;
    }
    return false;
}

// java 16 이후
@Override
public boolean equals(Object obj) {
    if (obj instanceod Vehicle vehicle) {
        if (this.vehicleCode == vehicle.vehicleCode) return true;
        else return false;
    }
    return false;
}

Java SE 17 (LTS)

- 2021. 09 공개

- Sealed Classes : 봉인 클래스를 통해 허용되는 하위 유형을 정의하여 세분화된 상속 제어를 할 수 있음. 봉인 클래스는 다음과 같은 규칙이 있음.

  1. 봉인 클래스와 permit 된 서브 클래스는 동일한 모듈 또는 패키지에 속해야 함.

  2. 모든 permit된 서브 클래스는 봉인 클래스를 extends 해야 함.

  3. 모든 permit된 서브 클래스는 슈퍼 클래스에 의해 시작된 봉인을 이어갈지 선언해야 함

    (final : 더 이상 확장하지 않음, sealed : 자신도 봉인하여 자식 클래스를 가짐, non-sealed : 봉인을 해체하여 다른 클래스가 확장 가능)

- switch 패턴 매칭 (preview)

Java SE 18

- 2022. 03 공개

- Java API의 기본 Charset을 UTF-8로 지정

- swtich 패턴 매칭 (2nd preview)

Java SE 19

- 2022. 09 공개

- record 패턴 매칭 (preview)

- switch 패턴 매칭 (3rd preview)

- 가상 스레드 (preview)

Java SE 20

- 2023. 03 공개

- record 패턴 매칭 (2nd preview)

- switch 패턴 매칭 (4th preview)

- 가상 스레드 (2nd preview)

 

※ 위에 기록한 정보 외에도 각 버전별 추가 변경 사항이 있습니다. 필요하시면 공식문서를 참고하시기 바랍니다.

참    고    자    료

- Java 버전 별 특징 | SeoArc

 

- Java 버전 별 특징(1 ~ 17 버전) | 무사뎀벨레

728x90
반응형

'백엔드 > Java' 카테고리의 다른 글

JVM  (0) 2024.03.08
Garbage Collector  (0) 2024.03.07
Java  (0) 2024.03.07
JDBC  (0) 2024.03.06
Persistence Framework  (0) 2024.03.06