DeJa
Techvu
DeJa
전체 방문자
48,644
오늘
4
어제
65
  • Techvu (60)
    • DesignPatterns (3)
      • 생성 (0)
      • 구조 (1)
      • 행동 (2)
    • Refactoring (0)
    • DataStructures (0)
    • Algorithms (24)
      • 기본 지식 (12)
      • 문제 풀이 (12)
    • OOP (0)
    • TDD (2)
    • DDD (0)
    • Programming Languages (9)
      • Java (9)
      • Kotlin (0)
    • Spring (1)
    • JPA (7)
    • Web (1)
      • 기본 지식 (1)
      • 실무 경험 (0)
    • CS (12)
      • Network (1)
      • OS (8)
      • DataBase (3)
      • Server (0)
    • Git (1)
    • Conferences (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

  • Study
  • GitHub
  • Medium Blog

인기 글

  • 자바 버전별 역사 및 특징
    2022.01.12
    자바 버전별 역사 및 특징
  • 깃허브 사용 방법
    2021.12.15
    깃허브 사용 방법
  • 스키마(Schema)
    2022.01.08
    스키마(Schema)
  • 동시성 이슈(Concurrency Issue)
    2022.03.20
    동시성 이슈(Concurrency Issue)
  • 재귀 함수(Recursion Function)
    2021.12.08
    재귀 함수(Recursion Function)

태그

  • DATABASE
  • CS
  • java
  • TDD
  • web
  • 디자인패턴
  • Spring
  • OS
  • 알고리즘
  • JPA
  • network

최근 댓글

  • 글 잘읽고 가요.
    아이폰
  • 컴파일러자체에서 꼬리재귀를 지원하지 않으니 static으로⋯
    aaa
  • 압도적 감사
    ㅇㅇㅇ

최근 글

  • Write a test code right now
    2022.03.24
    Write a test code right now
  • 동시성 이슈(Concurrency Issue)
    2022.03.20
    동시성 이슈(Concurrency Issue)
  • POJO, JavaBean, Entity, VO, DTO
    2022.02.08
    POJO, JavaBean, Entity, VO, DTO
  • TDD with Agile
    2022.02.05
    TDD with Agile
  • Java Stream 기초
    2022.01.23
    Java Stream 기초

티스토리

hELLO · Designed By 정상우.
DeJa

Techvu

자바 버전별 역사 및 특징
Programming Languages/Java

자바 버전별 역사 및 특징

2022. 1. 12. 20:04
728x90

자바 버전별 역사 및 특징

  • JDK 1.0a2
    • 1995년 5월 23일 발표. 자바 언어 자체가 정식으로 발표된 날
    • 이때의 명칭은 Oak
  • JDK 1.0
    • 1996년 1월 23일 발표
    • 1.0.2 버전에서 이름이 Java 로 변경
  • JDK 1.1
    • 1997년 2월 19일 발표
    • Inner Class, JavaBeans, RMI, Reflection, Calendar 유니코드 지원 등이 추가되었다.
    • What is Java Beans
      • 자바로 작성된 소프트웨어 컴포넌트를 지칭
      • Beans 규약
        • 기본 생성자가 반드시 존재해야 한다.
        • 모든 속성은 비공개이다.
        • 속성에 접근하고 꺼내올 수 있는 getter, setter 메서드를 구성한다.
        • Serializable 을 구현한다.
    • What is RMI(Remote Method Invocation)
      • 분산 애플리케이션을 구축하는데 사용된다.
      • 한 시스템(JVM)에 상주하는 객체가 다른 JVM에서 실행 중인 객체에 액세스/호출할 수 있도록 하는 메커니즘이다.
      • java.rmi 패키지에 제공된다.
  • J2SE 1.2
    • 1998년 12월 8일 발표
    • Swing GUI, JIT, Collection Framework 등이 추가 되었다.
  • J2SE 1.3
    • HotSpot JVM, JNDI, JPDA, JavaSound 등이 추가 되었다.
  • J2SE 1.4
    • 2002년 2월 6일 발표
    • assert, 정규표현식, XML API 등이 추가 되었다.
  • J2SE 1.5
    • Generics, Annotation, AutoBoxing/UnBoxing, Enumeration, 가변 길이 파라미터, static import, Concurrency API 등이 추가 되었다.
    • JDK 1.5 이전에서는 여러 타입을 사용하는 대부분의 클래스나 메소드에서 인수나 반환값으로 Object 타입을 사용했다.
// 1.5 이전, 컬렉션에 기본 타입을 삽입하는 코드
List list = new ArrayList(10);
list.add(new Integer(10)); // AutoBoxing, UnBoxing 지원 X
// 1.5 이후, 컬렉션에 기본 타입을 삽입하는 코드
List<Integer> list = new ArrayList<>();
list.add(10);
  • Generics 가 등장함으로써, 잘못된 타입이 사용될 경우 컴파일 과정에서 제거할 수 있게 되었다. 또한 불필요한 타입 변환이 필요 없다.
  • Generic 사용 이전
List list = new ArrayList();
list.add("JungHo");
String name = (String) list.get(0);
  • Generic 사용 이후
List<String> list = new ArrayList<>();
list.add("JungHo");
String name = list.get(0);
  • Java SE 6
    • 2004년 9월 30일 발표
    • 이때 부터 표기가 J2SE 에서 Java SE 로 변경 되었다.
    • Java Compiler API, Pluggable Annotation 등이 추가 되었다.
    • Java Compiler API
    • Pluggable Annotation
      • Lombok 등에서 사용되고 있다.
      • 쉽게 말해 Annotation Processor 를 생각하면 된다.
        • 즉, 컴파일 타임에 코드 삽입을 구현한다.
  • Java SE 7
    • 2011년 7월 7일에 발표.
      • 7버전이라 일부러 7월 7일에 한것같은 느낌임...
    • Java SE 7의 일반 지원은 2015년 4월에 종료 되었고, 오라클을 통한 연장 지원은 2022년 7월에 종료 예정이다.
    • switch 문에서 String 사용, try-catch-resources, 이진수 리터럴, 숫자 리터럴에 _ 지원, 새로운 File NIO 라이브러리 등이 추가되었다.
  • Java SE 8
    • 2014년 3월 18일에 발표
    • 일반 지원은 2019년 1월에 종료 되었고, 연장 지원은 2030 년까지 오라클의 유료지원을 받을 수 있다고 한다.
      • 참고. 오라클, 자바 8에 대한 새로운 연장 지원 날짜 발표
    • Lambda Expression, 새로운 날짜와 시간 API(Ex. JodaTime), Interface Default Method 추가, PermGen 영역 삭제, Stream API 등이 추가 되었다.
  • Java SE 9
    • 2017년 9월 21일 발표
    • 일반 지원은 2018년 3월에 종료되었다.
    • Java 를 인터프리터 언어 셸처럼 사용할 수 있는 JShell 이 추가되었다.
    • Java 바이트코드를 기계어로 미리 번역하는 선행 컴파일(Ahead-Of-Time Compilation) 역시 실험 기능으로 추가되었다.
  • Java SE 10
    • 2018년 3월 20일 발표
    • 일반 지원은 2018년 9월에 종료되었다.
    • var 키워드를 이용한 지역 변수 타입 추론
    • 병렬 처리 가비지 컬렉션, 개별 쓰레드로 분리된 Stop-The-World 등이 추가 되었다.
      • 기존에는 Stop-The-World 가 발생하면 GC 를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작한다. 근데 이게 개별 쓰레드로 분리되어서 Stop-The-World 시간이 개선된것 같다.
    • JVM 힙 영역을 시스템 메모리가 아닌 다른 종류의 메모리에도 할당할 수 있게 되었다.
    • JDK에서 루트 인증 기관(CA) 인증서의 기본 세트를 제공하게 되었다.
    • Enhanced for Loop 를 위한 바이트코드 생성
      • Enhanced for Loop 에 대한 바이트코드 생성이 개선되어 해당 루프에 대한 컴파일 접근 방식이 개선되었다.
  • Java SE 11
    • 2018년 9월 25일 발표.
    • hotspot/jvmti 기능 등이 추가되었다.
      • JVMTI(JEP 331) 를 통해 액세스할 수 있는 낮은 오버헤드 샘플링 Java 힙 할당 방법을 제공한다.
    • 이클립스 재단으로 넘어간 Java EE가 JDK 에서 삭제되고, JavaFX 도 JDK 에서 분리되어 별도의 모듈로 제공된다.
    • 가장 커다란 변화는 바로 라이선스 부분이다. Java SE 11 부터 Oracle JDK 의 독점 기능이 오픈 소스 버전인 OpenJDK 에 이식된다. 이는 다시 말해 Oracle JDK 와 OpenJDK가 완전히 동일해진다는 뜻이다.
    • 2019년 1월부터 오라클이 제공하는 모든 Oracle JDK는 유료화되며, 구독권을 구입하지 않으면 Oracle JDK에 접근 자체가 금지된다. 따라서, OpenJDK 를 기반으로 한 다른 서드파티 JDK 가 대안으로 떠오르고 있다.
      • Ex. Zulu JDK, AdoptOpenJDK 등이 있다.
  • Java SE 12
    • 2019년 3월 19일 발표.
    • 특징 중 하나로 문법적으로 Switch 문을 확장한 것이 있다.
    • 예전 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);
}
  • Java SE 13
    • 2019년 9월 17일 발표.
    • yield 라는 예약어가 추가되었다.
  • Java SE 14
    • 2020년 3월 18일 공개.
    • record 라는 데이터 오브젝트 선언 기능이 추가되었다.
      • record 클래스는 final 클래스라 상속할 수 없다.
      • 각 필드는 private final 로 정의된다.
    • record 사용 방법
  • Java SE 15
    • 2020년 9월 15일 공개.
    • sealed class(봉인 클래스)가 추가되었다.
  • Java SE 16
    • OpenJDK 의 버전 관리가 Mercurial 이었으나, 이제 Git 으로 바뀐다.
    • 이제 OpenJDK 소스를 GitHub 에서 볼 수 있다
  • Java SE 17
    • 2021년 9월 15일 공개.
    • 의사난수 생성기를 통해 예측하기 어려운 난수를 생성하는 API 정식 추가
    • Java Applet 이 완전 제거될 예정이라 Deprecate 처리 되었다.
      • Deprecate the Applet API for Removal

References

  • https://docs.oracle.com/en/java/javase/index.html
  • https://namu.wiki/w/Java
728x90
저작자표시 비영리 동일조건
  • 카카오스토리
  • 트위터
  • 페이스북

'Programming Languages > Java' 카테고리의 다른 글

Java Stream 기초  (0) 2022.01.23
자바 어노테이션  (0) 2022.01.19
다양한 자바 플랫폼(SE/EE/ME)  (0) 2022.01.11
JVM Archtiecture  (0) 2021.12.24
자바 프로그램 실행 과정  (0) 2021.12.24
    'Programming Languages/Java' 카테고리의 다른 글
    • Java Stream 기초
    • 자바 어노테이션
    • 다양한 자바 플랫폼(SE/EE/ME)
    • JVM Archtiecture
    java
    DeJa
    DeJa
    Tech Blog
    댓글쓰기
    자바 어노테이션
    다음 글
    자바 어노테이션
    다양한 자바 플랫폼(SE/EE/ME)
    이전 글
    다양한 자바 플랫폼(SE/EE/ME)

    티스토리툴바