이 포스팅은 책내용에는 있지 않다. 모던자바라고 불리는 자바8 이후를 배우려면 자바의 역사도 알아야 한다고 생각해서 추가로 포스팅을 한다.
* Java 버전별 특징 및 역사
1. Java 1.0a(1990년 12월~1991년 1월)
Sun MicroSystems는 전문가들로 구성된 그린 프로젝트(Green Project)를 만듭니다.
여기에는 패트릭 노턴(Patrick Naughton), 마이크 쉐리던(Mike Sheridan), 제임스 고슬링(James Gosling)이 포함되었으며
초기에는 Oak라는 언어로 불리며 가전기기에서 쓰일 각 플랫폼에 독립적인 플랫폼 독립적인 언어를 개발하려고 했습니다.
그린팀에서는 프로세스 독립적인 언어의 잠재력을 보여줄 수 있는 양방향 휴대용 엔터테인먼트 장치인 Star7을 제작했습니다.
Star7에는 Green OS, Oak 프로그래밍 언어, Tool Kit, 라이브러리 및 하드웨어가 통합되어 있었습니다. Java의 전신인 Oak는 제임스 고슬링이 Star7용으로 작성한 프로세스 독립적인 언어였습니다.
1994년에는 웹 브라우저에 언어를 이식하기도 하였습니다.
2. Java 1.0a2(1995년 5월)
상표권 문제로 Oak는 Java로 이름이 바뀌게 되었으며, SunWorld Conference에서 공식적으로 발표되었습니다.
3. JDK 1.0.2 = Java 1(1996년 1월)
최초의 안정화 버전을 거친 JDK 1.0.2가 Java1이라는 이름으로 변경되어 첫번째 JavaOne 행사가 열렸습니다.
JDK는 Java Development Kit으로서 나중에 나올 Java SE(Standard Edition) 라는 용어가 사용되기 이전이었습니다.
4. JDK 1.1(1997년 1월)
이때의 Java는 약 40만명의 개발자가 사용하는 세계에서 두 번째로 많이 사용하는 언어로 성장합니다.
* 추가/개발/특징
inner class, JavaBeans, RMI(Remote Method Invocation), reflection(객체를 통해 클래스의 정보를 분석), unicode, internationallization(국제화), Java Archive(JAR), Java DataBase Connectivity(JDBC)가 있습니다.
5. JDK 1.2 = Java 2 Standard Edtion Software Development Kit = Java2SDK = Java2 SE 1.2(1998년 12월)
이때 처음으로 Standard Edition이라는 용어가 사용되었습니다. 제품의 변화가 크다는 이유로 Java 2라는 이름을 달고 나오게 되었습니다. 약자로 부르면 Java2SDK로 불려야겠지만, 당시 커뮤니티에서는 JDK 1.2로 부르게 됩니다. JDK 1.2부터 Java의 제품은
Standard / Enterprise / Micro로 나뉘게 됩니다.
* 추가/개발/특징
strictfp(자바와 타 플랫폼과의 부동소수점 차이를 맞춰줌), SWING GUI, JIT CORBA(Common Object Request Broker Architecture - OMG에서 정의한 규격으로서 소프트웨어 컴포넌트들을 언어와 사용환경에 대한 제약이 없는 통합을 위한 표준), Collections가 있습니다.
6. J2SE 1.3(2000년 3월)
JavaOne 개발자 회의에서 애플의 공동 설립자인 스티브 잡스(Steve Jobs)와 Sun의 회장 겸 CEO인 스콧 맥닐리(Scott McNealy)는 표준 Mac OX 운영체제와 함께 Java 2 Standard Edition을 번들로 제공할 것이라고 발표합니다.
* 추가/개발/특징
HotSpot JVM, JNDI, JPDA, JavaSound, RMI가 CORBA지원 등이 있습니다.
- JNDI(Java Naming and Directory Interface)는 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup)하기 위한 자바 API다.
- JPDA(Java Platform Debugger Architecture)
7. J2SE 1.4(2002년 2월)
J2SE 1.4부터 JCP(Java Community Process)에 의해 오픈소스로 관리되기 시작합니다.
이 당시의 제품들은 Java 2 Standard Edition 1.4 (J2SE 1.4), J2SE Development Kit 1.4 (JDK 1.4), J2SE Runtime Environment 1.4 (JRE 1.4)가 있습니다.
- JRE는 자바 실행환경(Java Runtime Environment)의 약자입니다.
JRE는 JVM 이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있습니다.
JRE는 JVM의 실행환경을 구현했다고 할 수 있습니다.
* 추가/개발/특징
assert, regular expression(정규표현식), NIO, IPv6, XML API, JCE, JSSE, JAAS, Java Web Start가 있습니다.
- Assertion은 불리언 식(expression)을 포함하고 있는 문장으로서, 프로그래머는 그 문장이 실행될 경우 불리언 식이 참이라고 단언할 수 있습니다.
- NIO(New Input/Output)은 이전의 입출력 방식에서 블로킹/논블로킹방식 추가(채널), 버퍼, 셀렉터등이 있다.
8. JSE 5.0(2004년 9월)
Java2에서 Java로 이름이 변경되었습니다. 그리고 1.5가 아닌 5.0으로 버전이 발표되어서 현재 Java 8처럼 불리게 되었습니다.
(내부적으로 콘솔에서 버전값을 요청하면 1.5 로 나타났습니다.) java -version => 1.5.0
이때 가장 큰 논쟁은 Java가 오픈소스인지의 여부였습니다. Sun은 공식적으로 Java 기반 프로젝트가 Java 사양과 호환되는 것으로 인증받을 것을 요구하는데, 오픈소스 지지자들은 Java가 좀 더 자유로운 형식으로 제공되길 원했습니다. 제임스 고슬링(James Gosling)은 Java 기술의 오픈 소스 구현을 여러 개 허용하면 유닉스와의 비 호환성을 초래할 수 있다며 반대했습니다.
* 개발
generics, annotation, auto boxing/unboxing, enumeration, 가변길이 파라미터, static import, concurrency API가 있습니다.
9. Java SE 6(2006년 12월)
버전에서 1을 빼고 발표하던 5.0과는 다르게, Java Platform, Standard Edition 6 (Java SE 6)으로 발표되었습니다.
- 2007년 Sun은 GPL에 따라 Java 클래스 라이브러리의 전체 소스 코드를 릴리즈합니다. (Sun의 라이선스가 부여된 구성 요소는 제외되었다.) 2007년 아이폰이 나오는데, 이는 Oak가 삽입된 Star7 데모로부터 15년만의 일이었습니다.
- 2008년 Sun은 2년마다 발표하던 새로운 버전의 Java를 발표하지 않습니다. 2009년 JavaOne 개발자 회의의 오프닝 세션에서 오라클의 Sun 인수 발표가 나오게 됩니다. 2010년이 되어서야 JCP는 Java 7과 Java 8 로드맵을 승인합니다.
* 추가/개발/특징
interface에 @Override 추가 가능, JDBC 4.0, Scripting Language Support, Java Compiler API, pluggable annotation이 있습니다.
10. Java SE 7(2011년 7월)
JDK 1.0에서 JDK 6까지 2년마다 업데이트가 되었지만 JDK 7은 5년만에 업데이트 되었습니다.
JDK 7이 나오기까지 Sun 사는 오라클에 인수되는 등 Java는 여러가지 부침을 겪었습니다. 업데이트가 너무 늦어지자 오라클은 일부 명세를 모아서 업데이트를 하기로 결정하게 됩니다. 결국 JDK 1.7에는 많이들 기대했던 Lambda와 Jigsaw와 같은 기능이 들어가지 못합니다.
오라클 Java그룹 부사장인 “조지스 사브”는 JDK 6 이후 7이 나오는 기간이 너무 길었던 것이 Java의 역사에서 가장 실망스러웠던 일이었다고 밝히기도 하였습니다.
* 추가/개발/특징
diamond operator <>, generics 사용성 개선, 리소스 자동해제(try-resource), Gabage Collector 기능 개선, switch문 string사용, multi-catch, concurrency API(new), File NIO(new), Java2D, dynamic language, 이진수 표현(숫자 앞에 0B나 0b를 붙이면 이진수로 판단 (8진수는 0, 16진수는 0x, 0X))가 있습니다.
11. Java SE 8(2014년 3월)
2011년이 지나고 3년이 지난 2014년이 되서야 Java8이 발표가 되었습니다.
32bit 지원 마지막 공식 버전입니다.
* 추가/개발/특징
lamdba expression, Optional, type annotation, stream api, repeating annotation, static link library, interface default method, unsigned integer 계산, JodaTime(날짜와 시간의 새로운 API), rhino 대신 nashorn javascript 엔진 탑재, GB성능 개선 등이 있습니다.
- lambda expression은 람다 표현식이라고 불리며, 다양한 표현식이 존재합니다. 컴파일러한테(JIT 인터프리터)한테 실질적 구현을 시키는 방식입니다.
단순 for-loop와의 비교를 하게되면 람다표현식을 사용하면 더 느릴 수도 있지만 무조건적인 것은 아니라고합니다. 참고 링크
- Optional은 null 포인터 익셉션을 최소화하면서, null이 될수도 있는 객체를 감싸는 일종의 Wrapper 클래스입니다.
- Interface default method: Interface 클래스에 default/static 키워드를 사용해서 구현 메소드를 interface에 작성할 수 있게 되었습니다.
12. Java SE 9(2017년 9월)
JavaOne에서 오라클 JDK의 릴리즈 주기를 6개월 단위로 하겠다고 선언합니다.(뭔가 못지킬 약속하는 것같은 느낌인데..)
9 버전과 10 버전은 non-LTS로 릴리즈되었기 때문에 6개월 무상 업데이트 후 패치가 진행되었습니다.
이제 java -version에서 1.x 단위가 아닌 9.0으로 변경했습니다. Ahead-of-time compiler를 시범 적용했습니다.
Java Applet 기능이 종료되었으며, 64bit 버전으로만 출시했습니다.
* 추가/개발/특징
기존 jar방식을 개선하기 위한 Java Platform Module System(Jigsaw) 추가, Java 9 JShell, HTML5 Javadoc, 익명클래스에 대해서 diamond operator 허용, process API, immutable collection, 통합 로깅, HTTP/2, 프로퍼티 파일에 UTF-8 지원, private interface method(인터페이스 내에 private 구현체 가능)이 있습니다.
13. Java SE 10(2018년 3월)
6개월 업데이트를 지킵니다..ㅋㅋ
2018년 오라클이 신규 버전의 릴리즈 주기를 앞당기면서 유상 패치에 대한 이슈가 불거집니다.
JDK Repository가 하나로 통합되었으며, 이전 버전 deprecated처리된 API가 삭제되었습니다.
* 추가/개발/특징
var 키워드를 이용한 지역변수 타입 추론, 병렬처리 GC, 개별 Thread로 분리된 Stop The World, Root CA, JVM heap영역을 시스템 메모리가 아닌 다른종류의 메모리에도 할당
14. Java SE 11(2018년 9월)
OracleJDK의 독점기능이 OpenJDK에 이식되었습니다.(OracleJDK == OpenJDK)
2019년 1월부터 OracleJDK가 유료모델로 전환되었습니다.
eclipse 재단으로 넘어간 JavaEE가 삭제되었습니다. JavaX도 JDK에서 분리되어 별도의 모듈을 제공하게 되었습니다.
* 추가/개발/특징
lambda parameter에 대한 지역변수 문법, 엡실론 GC - HTTP Client 표준화
15. Java SE 12(2019년 3월)
* 추가 개발/특징
switch문 확장: ,와 -> 추가
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
}
GC 개선, Micro BenchMark Tool 추가(성능 개선)
16. Java SE 13(2019년 9월)
* 추가/개발/특징
switch문에 yield 예약어 추가
17. Java SE 14(2020년 3월)
* 추가/개발/특징
instanceof 패턴 매칭 (preview), record (data object) 선언 기능 추가 (preview)
18. Java SE 15(2020년 9월)
* 추가/개발/특징
EdDSA 암호화 알고리즘 추가, 패턴 매칭(2차 preview), 스케일링 가능한 낮은 지연의 GC 추가(ZGC), Solaris 및 SPARC 플랫폼 지원 제거, 외부 메모리 접근 API(인큐베이팅), record(2차 preview), Sealed class, interface (preview), 다중 텍스트 블록
& 출처들
https://www.whatap.io/ko/blog/12/, https://i3utterfly.tistory.com/entry/JAVA-%EB%B2%84%EC%A0%84%EB%B3%84-%EC%A0%95%EB%A6%AC, https://velog.io/@arkeio/JDK-%EB%B2%84%EC%A0%84%EB%B3%84-%EC%B0%A8%EC%9D%B4
'Study > 모던 자바 인 액션' 카테고리의 다른 글
모던 자바 인 액션스터디 (2) - 자바 8,9,10,11 : 무슨 일이 일어나고있는가? (0) | 2021.06.28 |
---|---|
모던 자바 인 액션스터디 (0) - 시작 & Why? & 목차 (1) | 2021.06.27 |
댓글