Java 버전마다 바뀐점을 알아보자
목차
- Java Overview란
- Java 분류
- Java 버전
내용
JavaOverview
- Sun Microsoft에서 1995년에 개발한 객체지향 프로그래밍 언어로 창시자는 제임스 고슬링이다.
- 2010년에 Sun이 오라클에 인수되어 현재 Java의 저작권자는 Oracle로 2019년 1월부터 유료화되었다.
- Java EE는 이클립스 재단의 소유이다.
Java 분류
- Java SE(Java Standard Edition / J2SE)
- 대부분의 사람들이 가장 많이 접하는 표준 에디션으로, Java의 핵심 API화 기능들을 제공한다.
- Jakarta EE, 구 Java EE(Java Enterprise Edition / J2EE)
- 기업에서 운영하는 서버 페이지에 특화된 에디션이다. JSP와 서블릿을 비롯한 웹 애플리케이션 서버에 관련된 기술들이 포함되어 있다.
- Java ME(Java Micro Edition / J2ME)
- PDA나 셋톱박스, 센서 등의 임베디드 시스템 환경에 특화된 에디션이다.
- JavaFX
- 데스크톱 애플리케이션 개발 및 배포를 위한 에디션으로 크로스 플랫폼 이식과 GUI 라이브러리를 제공한다.
Java 버전 / J2SE: 15, Java SE: 6
- Java 1.0 / JDK 1.0
- 1996년 1월 23일에 발표.
- 발표 이전에 이름은 Oak였으며, 안정화 작업을 거친 이후 Java로 이름 변경.
- Java 1.1 / JDK 1.1
- 1997년에 2월 19일 발표.
- 주요 사항
- AWT 이벤트 모델을 광범위하게 재구성.
- 언어에 추가된 Inner Class, JavaBeans, JDBC, RMI, Replection, 유니코드 지원, 국제화 등이 추가.
- Java 1.2 / J2SE 1.2
- 1998년 12월 8일 발표.
- 일반 지원은 2003년 11월 종료.
- GUI, JIT, CORBA 등의 굵직한 기능이 추가(59개의 패키지에서 1520개의 클래스로 Java 플랫폼의 크기를 3배 늘림.)되면서 2부터 약칭을 J2SE(Java 2 Standard Edition)로 표기하기 시작.
- 주요 사항
- 썬의 JVM에는 처음으로 JIT 컴파일러가 장착.
- Java Applet을 구동하는 웹 브라우저 플러그인
- strictfp, Swing, GUI, CORBA, Collections 등이 추가.
- 1998년 12월 8일 발표.
- Java 1.3 / J2SE 1.3
- 2000년 3월 8일 발표.
- 일반 지원은 2006년 11월 종료.
- 주요 사항
- HotSpot JVM 포함
- RMI가 CORBA를 지원하도록 변경.
- JNDI(핵심 라이브러리에 포함)
- JPDA(Java 플랫폼 디버거 아키텍처)
- JavaSound, 합성 프록시 클래스 등이 추가.
- 2000년 3월 8일 발표.
- Java 1.4 / J2SE 1.4
- 2002년 2월 6일 발표.
- 일반 지원은 2008년 10월, 연장 지원은 2013년 2월 종료.
- 주요 사항
- 언어 변경 assert 키워드.
- 인터넷 프로토콜 IPv6 지원.
- 통합 보안 및 암호화 확장(JCE, JSSE, JAAS)
- 환경 설정 API(java.util.prefs)
- 정규표현식, Non-Blocking IO(NIO), XML API, Java Web Start 등이 추가.
- 2002년 2월 6일 발표.
- Java 5 / J2SE 5.0
- 2004년 9월 30일 발표.
- 일반 지원은 2009년 9월, 연장 지원은 2015년 5월 종료.
- 주요 사항
- J2SE 5.0까지 Windows 9x와 Windows NT 4.0이 지원.
- 이때부터 버전 중 앞의 1을 제외하고 표기하기 시작. 그러나 내부적으로 여전히 1.5, 1.6, 1.7 등을 사용.
- Generics: 컬렉션에 컴파일 유형 안전성을 제공하고 대부분의 유형 변환이 필요하지 않음.
- Annotation: AOP(Ospect Oriented Programming: 관심지향 프로그래밍)을 편리하게 구현.
- Auto Boxing/Unboxing: 기본 유형(int 등)과 래퍼 클래스(Integer 등) 간의 자동 변환
- Enumeration: enum 키워드는 typesafe를 생성하며, 순서형 값을 만듦.
- 가변 길이 파라미터(Varargs): e.g.) void main(String… lines)
- Static Import, 새로운 Concurrency API 들이 추가.
- Java는 표준 입력(stdin) 지원이 안 좋았는데, J2SE 5에 들어서 java.util.Scanner가 추가되면서 이전보다 편하게 표준 입력을 사용하게 됨.
- 2004년 9월 30일 발표.
- Java 6 / Java SE 6
- 2006년 12월 11일 발표.
- 일반 지원은 2013년 2월, 연장 지원은 2018년 12월 종료.
- 주요 사항
- 이때부터 표기가 J2SE에서 Java SE로 변경되었고, `.0`을 삭제.
- Scripting Language Support: Mozilla JavaScript Rhino 통합을 위한 API로 스크립팅 언어와의 통합 및 기본 제공.
- JDBC 4.0, Java Compiler API, Pluggable Annotation 등 추가
- 2006년 12월 11일 발표.
- Java 7 / Java SE 7
- 2011년 7월 7일 발표.
- 일반 지원은 2015년 4월 종료. 연장 지원은 2022년 7월 종료 예정.
- 주요 사항
- Dynamic Language 지원 switch 문에서 String 사용.
- try문에서 자동 자원 관리.
- Diamond Operator<>, 이진수 리터럴, 숫자 리터럴에 _ 지원.
- 새로운 Concurrency API, 새로운 NIO 라이브러리, Elliptic Curve Cryptography, Java2D를 위한 Xrender, Upstream, Java Deployment Ruleset 등이 추가.
- 2011년 7월 7일 발표.
- Java 8 / Java SE 8
- 2014년 3월 18일 발표.
- 일반 지원은 2019년 1월에 종료. 연장 지원은 2023년 9월에 종료될 예정.
- Lambda Expression, Rhino 대신 Nashorn JavaScript 엔진 탑재.
- Annotation on Java Types, Unsigned Integer 계산, Repeating Annotation, 새로운 날짜와 시간 API, Static Link JNI Library, Interface Default Method, PermGen 영역 삭제, Stram API 등이 추가.
- Java 9 발표의 지연 때문에 2018년 9월로 연장되었다가, 이후 라이선스 이관 문제로 인해 2019년 1월로 다시 연장.
- 32비트를 지원하는 마지막 공식 Java 버전으로, 이후 버전의 32비트 지원은 오직 서드파티를 통해서만 지원.
- 2014년 3월 18일 발표.
- Java 9 / Java SE 9
- 2017년 9월 21일 발표.
- 일반 지원은 2018년 3월에 종료.
- 주요 사항
- Project Jigsaw기반으로 런타임이 모듈화된 것.
- 런타임의 모듈화는 하위 호환성을 어느 정도 포기하고 성능을 추구한 것.
- 콘솔 프로그램 개발에는 더 이상 AWT나 Swing 같은 불필요한 라이브러리를 사용X, 최상위 모듈인 Base만 사용.
- 특정 프로그램에 최적화된 최소 런타임을 제작할 수 있게 되면서 패키징 역시 간편.
- Java를 인터프리터 언어 셸처럼 사용할 수 있는 JShell이 추가.
- Java 바이트코드를 기계어로 미리 번역하는 선행 컴파일(Ahead-Of-Time Compilation) 역시 실험 기능으로 추가.
- Deprecated 표시에는 해당 버전과 제거 예정 여부를 표시.
- 불변 컬렉션을 생성할 수 있도록 새로운 팩토리 메서드 추가.
- 통합 로깅, HTTP/2, private 인터페이스 메소드, HTML5 Javadoc 등도 지원.
- 프로퍼티 파일에 UTF-8이 지원되어 인코딩 문제로 고생할 필요가 없어짐.
- Java Applet 기능 지원 종료.
- Project Jigsaw기반으로 런타임이 모듈화된 것.
- 2017년 9월 21일 발표.
- Java 10 / Java SE 10
- 2018년 9월 25일 발표.
- 일반 지원은 2018년 9월에 종료.
- 주요 사항
- var 키워드를 이용한 지역 변수 타입 추론가능하며, C#과 기능 동일.
- 병렬 처리 가비지 컬렉션, 개별 쓰레드로 분리된 Stop-The-Word, 루트 CA 목록 등이 추가.
- JDK의 Repository가 하나로 통합되었으며, JVM Heep 영역을 시스템 메모리가 아닌 다른 종류의 메모리에도 할당할 수 있게 됨.
- 실험 기능으로 Java 기반의 JIT 컴파일러 추가.
- Deprecated API는 Java SE 10에서 완전 삭제되어 컴파일 불가.
- 2018년 9월 25일 발표.
- Java 11 / Java SE 11
- 2018년 9월 25일 발표.
- 일반 지원은 2023년 9월, 연장 지원은 2026년 9월에 종료될 예정.
- 주요 사항
- 이클립스 재단으로 넘어간 Java EE가 JDK에서 삭제되고, Java FX도 JDK에서 분리되어 별도의 모듈로 제공.
- 람다 파라미터에 대한 지역 변수 문법, 엡실론 가비지 컬렉터, HTTP 클라이언트 표준화 등의 기능 추가.
- 가장 큰 변화는 라이선스 부분
- Java SE11부터 Oracle JDK의 독점 기능이 오픈소스 버전인 OpenJDK에 이식.
- Oracle JDK와 OpenJSK가 완전히 동일해진다는 뜻.
- Oracle JSK는 Java Se11부터 LTS(장기 지원) 버전으로 3년마다 출시되는데 출시 후 5년 동안 오라클 기술 지원이 제공되고 최대 3년까지 지원기간 연장.
- Oracle JDK는 이제 3년에 한 번 출시되니 Java의 실질적인 version up을 담당하는 것은 OpenJDK가 된 셈.
- OpenJDK는 기업들을 위한 기술 지원X.
- 새로운 버전이 나오면 이전 버전에 대한 마이너 업데이트와 보안 업데이트는 중단.
- Oracle JDK 구독형 유료 모델로 전환.
- 2019년 1월부터 오라클이 제공하는 모든 JDK는 유료화되며, 구독권을 구입하지 않으면 JDK에 접근 자체가 금지.
- 기존 일반/연장 지원 서비스는 구독권에 포함되므로 별도의 서비스로 제공 X.
- 개인 사용자는 2021년 1월부터 비용 지불.
- 많은 기업들이 Oracle JDK에서 발을 빼거나, OpenJDK를 기반으로 한 다른 서드파티 JDK가 대안으로 떠오름.
- Java SE11부터 Oracle JDK의 독점 기능이 오픈소스 버전인 OpenJDK에 이식.
- 2018년 9월 25일 발표.
- Java 12 / Java SE 12
- 2019년 3월 19일 공개.
- 가비지 컬렉터 및 성능 개선.
- 특징 중 하나로 문법적으로 Switch문을 확장.
- 기존) switch(day) { case MONDAY: case FRIDAY: case SUNDAY: System.out.println(6); break; case TUESDAY: System.out.println(7); break; case THURSDAY: case SATURAY: System.out.println(6); break; case WEDNESDAY: System.out.println(6); break; }
- 바뀜) switch(day) { case MONDAY, FRIDAY, SUNDAY -> System.out.println(6); case TUESDAY -> System.out.println(7); case THURSDAY, SATURAY -> System.out.println(6); case WEDNESDAY -> System.out.println(6); }
참조 자료
'Dev > JAVA' 카테고리의 다른 글
[JAVA] 변수(Variable), 연산자(Operator), 조건문과 반복문 (0) | 2021.01.12 |
---|---|
[JAVA] 자바란? (0) | 2021.01.12 |