(기술) JDK 변천사
JDK Alpha and Beta (1995)
JDK 알파, 베타 버전은 불안정적인 API와 ABI들을 포함하였습니다.
JDK 1.0 (1996. 1. 23.)
처음에는 Oak라고 불렀고 안정화된 JDK 1.0.2 버전부터 Java 1이라고 부르게 되었습니다.
- 1.0.2 버전에서 private, protected 키워드를 메서드와 변수에 대한 접근 제한의 용도로 함께 사용하지 못하게 되었습니다.
JDK 1.1 (1997. 2. 19.)
- AWT 이벤트 모델에 많은 변화가 있었습니다.
- 내부 클래스를 사용할 수 있게 되었습니다.
- 빌더 형식의 개발도구에서 가시적으로 조작이 가능하고 재사용이 가능한 소프트웨어 컴포넌트인 자바빈즈가 추가되었습니다.
- 데이터베이스에 접속할 수 있도록 하는 자바 API JDBC가 추가되었습니다.
- 각 객체간, 컴퓨터간 메서드를 호출할 수 있게 해주는 RMI 기술이 추가 되었습니다.
- 런타임 시점에 사용되는 자신의 구조와 행위를 관리하고 수정할 수 있는 리플렉션이 가능해졌습니다.
- 프로그램의 실행 속도를 빠르게 하기 위해 실시간 컴파일 기법의 JIT컴파일러가 제공되었습니다.
J2SE 1.2 (1998. 12. 8.)
J2EE와 J2ME에 대한 기본 플랫폼이라고 구분하기 위해 JDK를 J2SE라고 명칭 변경되었습니다.
- 플랫폼 간 부동소수점 연산의 결과를 동일하게 해주는 strictfp 키워드가 추가되었습니다.
- Swing API를 핵심 클래스에 통합하였습니다.
- Sun의 JVM이 JIT컴파일러를 처음 갖추게 되었습니다.
- 자바의 실행 환경(자바 가상 머신)을 웹 브라우저의 플러그 인 형식으로 한 자바 플러그인이 제공되었습니다.
- CORBA 상호 운용을 위한 Java IDL이 구현 되었습니다.
- 자료구조를 관리할 수 있는 Collections 프레임 워크를 제공하게 되었습니다. (List, Set, Map 등)
J2SE 1.3 (2000. 5. 8.)
- HotSpot JVM을 포함하게 되었습니다.
- RMI가 CORBA와의 선택적 호환을 지원하기 위해 변경되었습니다.
- 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup)하기 위한 자바 API인 JNDI가 핵심 라이브러리에 포함되었습니다.
- 자바 코드의 디버깅을 위한 JPDA를 제공하게 되었습니다.
- 자바 플랫폼에서 audio 재생을 지원하기 위해 JavaSound를 제공하게 되었습니다.
- Synthetic proxy classes가 추가 되었습니다.
J2SE 1.4 (2002. 2. 6.)
- Assertion 기능을 지원하는 assert 키워드가 추가 되었습니다. (Assertion은 불리언 식(expression)을 포함하고 있는 문장으로서, 프로그래머는 그 문장이 실행될 경우 불리언 식이 참이라고 단언할 수 있다.)
- 펄의 정규표현식을 본뜬 정규 표현식을 사용하게 되었습니다.
- exception chaining이 하위 레벨의 exception을 캡슐화하여 새로 exception을 던질 수 있도록 허용합니다.
- IPv6를 지원하게 되었습니다.
- Non-blocking I/O API를 제공합니다. (java.nio)
- logging API를 제공합니다. (java.util.logging)
- JPEG나 PNG같은 형태의 이미지를 읽고 쓰기 위한 이미지 IO API를 제공합니다. (javax.imageio)
- XML parser와 XSLT 프로세서를 통합한 JAXP를 제공합니다.
- 보안과 암호화 확장을 통합 (해석이 확실치 않습니다.)
- 자바 애플리케이션을 쉽게 수행 시킬수 있도록 Java Web Start를 지원합니다.
- 설정 정보를 보다 쉽게 관리할 수 있는 Preferences API를 제공합니다. (java.util.prefs)
J2SE 5.0 (2004. 9. 30.)
새 언어 특징
- Generics: compile-time type safety를 제공합니다.
- Metadata: annotations이라고도 불리며 클래스와 메소드 같은 언어 구조에 추가적인 데이터를 태깅 할 수 있습니다.
- Autoboxing/unboxing: primitive types(ex. int)와 primitive wrapper classes(ex. Integer) 사이의 자동 변환을 제공합니다.
- Enumerations: enum 키워드가 type safety를 보장합니다.
- Varargs: 메소드에 같은 타입의 파라미터를 여러 개 넘길 경우 메소드 마지막 타입 뒤에 ...을 붙여서 배열처럼 받아서 사용할 수 있습니다.(ex. String... lines)
- 향상된 for each 반복문: 배열이나 어떤 Iterable의 각 멤버를 반복처리하기 위한 특별 구문을 확장하였습니다.
- 이전에 잘못된 Java Memory Model 체계를 쓰레드들이 메모리를 통해 어떻게 상호작용하는지 정의하여 바로잡았습니다.
- Static imports를 지원합니다.
기본 라이브러리의 향상
- RMI 오브젝트를 위한 자동 stub 생성이 가능합니다.
- Swing: synth라고 불리는 새로운 skinnable look and feel이 추가 되었습니다.
- 동시성 유틸리티를 제공합니다. (java.util.concurrent)
- 다수의 input stream과 버퍼로부터의 데이터 파싱을 위한 Scanner 클래스를 제공합니다.
Java SE 6 (2006. 12. 11.)
- update 10 부터 윈도우 9x 버전에 대한 지원이 중지되었습니다.
- 스크립트 언어 지원: 스크립트 언어를 통합하기 위한 Generic API가 지원되었습니다.
- 핵심 플랫폼과 Swing을 위한 많은 성능 향상이 있었습니다.
- JAX-WS를 통해서 웹 서비스 지원이 향상되었습니다.
- JDBC 4.0을 지원하게 되었습니다.
- Java 컴파일러 API: 자바 프로그램이 자바 컴파일러를 프로그래밍 방식으로 선택하거나 호출할 수 있게 해주는 API가 추가 되었습니다.
- JAXB를 버전 2.0으로 업그레이드: StAX 파서의 완성본을 포함합니다.
- 플러그 가능한 annotations를 지원하게 되었습니다.
- API에서 SwingWorker의 완성본과 테이블 정렬 및 필터링, true Swing double-buffering과 같은 많은 GUI가 향상 되었습니다.(gray-area effect 제거)
- JVM가 향상 되었습니다. (동기화와 컴파일러 성능 최적화, 존재하는 garbage collection 알고리즘의 업그레이드 및 새로운 알고리즘 구현, 어플리케이션 시작 성능 향상)
Java SE 7 (2011. 7. 28.)
- JVM에서 invokedynamic이 추가되어 dynamic languages가 지원됩니다. 자바 외 언어도 수행가능합니다.
- switch문에 String을 사용할 수 있게 되었습니다.
- try문에서 자동으로 자원을 관리하게 되었습니다. (try(resource){})
- 제네릭스를 사용할 때 <>지시자로 new연산자 부분을 함축할 수 있게 되었습니다. (ex. List<String> list = new ArrayList<>();)
- varargs 메서드 선언을 단순화 하였습니다.
- 정수형 타입의 상수를 표기할 때 바이너리 표기법을 지원하게 되었습니다. (0b 또는 0B prefix)
- 정수형 타입의 상수를 표기할 때 underscores를 허용하게 되었습니다. (ex. int number = 1_000;)
- 여러가지 예외 처리를 |를 통해서 하나의 catch문으로 처리하는 것이 가능해졌습니다. (catch (ExceptionOne | ExceptionTwo e) {})
- 플랫폼 독립성을 향상시키고 메타데이터와 심볼릭 링크를 지원하기 위해 새로운 파일 I/O 라이브러리가 추가되었습니다. (java.nio.file and java.nio.file.attribute)
- merge sort 대신 Timsort를 사용할 수 있게 되었습니다.
- elliptic curve cryptography 알고리즘이 라이브러리 수준으로 지원됩니다.
- 최근의 GPU 기능들을 더 잘 접근할 수 있는 자바2D용 X렌더(XRender) 파이프라인이 제공됩니다.
- SCTP와 Sockets Direct Protocol을 포함한 새로운 네트워크 프로토콜에 대한 라이브러리 수준의 지원이 향상되었습니다.
Java SE 8 (2014. 3. 18.)
- 람다 표현식을 언어 수준으로 지원하게 되었습니다.
- JVM에서 자바스크립트를 실행할 수 있는 Nashorn이 추가 되었습니다.
- 자바 타입을 어노테이션으로 사용할 수 있게 되었습니다.
- Unsigned 정수 연산을 지원합니다.
- 어노테이션의 반복 사용 시 @Repeatable를 통한 지정이 필요하게 되었습니다.
- 새로운 Date and Time API를 제공합니다.
- JNI 라이브러리가 정적으로 링크 되었습니다.
- Java FX 어플리케이션이 출시되었습니다.
- 메모리 문제를 발생시키던 Permanent Generation이 제거 되었습니다.