[JAVA] Java version에 대한 기록

2021. 1. 13. 00:02·Dev & Lenguage/JAVA

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 등이 추가.
  • Java 1.3 / J2SE 1.3
    • 2000년 3월 8일 발표.
      • 일반 지원은 2006년 11월 종료.
    • 주요 사항
      • HotSpot JVM 포함
      • RMI가 CORBA를 지원하도록 변경.
      • JNDI(핵심 라이브러리에 포함)
      • JPDA(Java 플랫폼 디버거 아키텍처)
      • JavaSound, 합성 프록시 클래스 등이 추가.
  • 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 등이 추가.
  • 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가 추가되면서 이전보다 편하게 표준 입력을 사용하게 됨.
  • 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 등 추가
  • 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 등이 추가.
  • 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비트 지원은 오직 서드파티를 통해서만 지원.
  • 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 기능 지원 종료.
  • 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에서 완전 삭제되어 컴파일 불가.
  • 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 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); }

참조 자료

  • https://namu.wiki/w/Java
  • https://en.wikipedia.org/wiki/Java_version_history#Versioning_change
반응형

'Dev & Lenguage > JAVA' 카테고리의 다른 글

[JAVA] 변수(Variable), 연산자(Operator), 조건문과 반복문  (0) 2021.01.12
[JAVA] 자바란?  (0) 2021.01.12
'Dev & Lenguage/JAVA' 카테고리의 다른 글
  • [JAVA] 변수(Variable), 연산자(Operator), 조건문과 반복문
  • [JAVA] 자바란?
Jo__oD
Jo__oD
[N개의 취미중 1개] Playground
  • Jo__oD
    JUST
    Jo__oD
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • Framework & Library
        • React
        • Next.js
        • Spring & Spring Boot
      • Dev & Lenguage
        • JavaScript
        • JAVA
        • 백엔드 & 프론트엔드 개발
      • Cloud & DevOps
        • OpenStack
      • Knowledge N
        • 운영체제(OS)
        • 네트워크(Network) N
        • 데이터베이스(DB)
        • 자료구조 & 알고리즘
        • 디자인 패턴
      • 운영
        • Linux
        • Windows
        • Docker
      • 기타
        • HTTP & 인증체계
        • Raspberry Pi
      • Error
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    raspberry pi
    가상 머신 Ubuntu
    가상머신
    VMware Ubuntu 생성
    Keystone
    java
    도서
    OpenStack
    가상 머신
    http
    http 개념
    가상 머신 생성
    지식채우기
    VMware 생성
    네트워크 분할
    ip자동할당
    오픈스택을 다루는 기술
    가상 머신 서버 생성
    가상 머신 Ubuntu 생성
    ip할당 설정
  • 최근 댓글

  • 최근 글

  • 160x600
  • hELLO· Designed By정상우.v4.10.3
Jo__oD
[JAVA] Java version에 대한 기록
상단으로

티스토리툴바