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 라이브러리 등이 추가되었다.
- 2011년 7월 7일에 발표.
- Java SE 8
- 2014년 3월 18일에 발표
- 일반 지원은 2019년 1월에 종료 되었고, 연장 지원은 2030 년까지 오라클의 유료지원을 받을 수 있다고 한다.
- 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 처리 되었다.
References
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 |