반응형
해당 글에서는 Java에서 사용되는 JDK(Java Development Kit), Open JDK에 대해 이해를 돕기 위해 작성한 글입니다.
1) Java
1. Java Version
💡 2023년 6월 기준 Java 버전에 대해서 확인해 봅니다.
Version | LTS | 출시 일자 | 무료 공개 업데이트 종료일 | 연장 지원일 |
java SE 6 | 2006년 12월 11일 | 2013년 4월 | ||
java SE 7 | 2011년 7월 28일 | - OpenJDK : ~2022년 9월 - Oracle : ~2015년 5월 - Red Hat : ~2020년 8월 - Azul : ~2022년 9월까지 |
||
java SE 8 | O | 2014년 3월 18일 | - OpenJDK는 Red Hat에 되어 유지보수 되고 있음 - Oracle (상업용) : ~2022년 3월 - Oracle (비상업용) : ~2030년 12월 - Azul : ~2030년 12월 - IBM Semeru : ~2026년 5월 - Eclipse Adoptium : ~2026년 5월 - Amazon Corretto : ~2026년 5월 |
- Oracle : 2030년 12월 - Red Hat : 2026년 11월 |
java SE 9 | 2017년 9월 21일 | OpenJDK : ~2018년 3월까지 | ||
java SE 10 | 2018년 3월 20일 | OpenJDK : ~2018년 9월까지 | ||
java SE 11 | O | 2018년 9월 25일 | - OpenJDK는 Red Hat에 되어 유지보수 되고 있음 - Azul : ~2026년 9월까지 - IBM Semeru : ~2024년 10월까지 - Eclipse Adoptium : ~2024년 10월까지 - Amazon Corretto : ~2027년 9월까지 - Microsoft : ~2024년 10월까지 |
- Oracle : 2026년 9월 - Azul : 2026년 9월 - Red Hat : 2024년 10월 |
java SE 17 | O | 2021년 9월 14일 | - 현재 SAP에서 유지보수중인 OpenJDK - Azul : ~2029년 9월까지 - IBM Semeru : ~2027년 10월까지 - Microsoft : ~2027년 9월까지 - Eclipse Adoptium : ~2027년 9월까지 |
- Oracle : 2029년 9월 - Azul : 2029년 9월 - Red Hat : 2027년 10월 |
java SE 18 | 2022년 3월 22일 | - OpenJDK와 Adoptium ~2022년 9월까지 | ||
java SE 19 | 2022년 9월 20일 | - OpenJDK : ~2023년 3월까지 | ||
java SE 20 | 2023년 3월 21일 | - OpenJDK : ~2023년 9월까지 | ||
java SE 21 | O | 2023년 9월 | - ~2028년 9월 | - Oracle : 2031년 9월 |
[ 더 알아보기 ]
💡 Java SE(Java Platform, Standard Edition) 란?
- Java 프로그래밍 언어와 관련 라이브러리, 도구 및 기타 자원을 포함한 Java 개발 환경의 표준이다. Java SE는 개발자들이 Java를 사용하여 일반적인 응용 프로그램을 만들 수 있도록 필요한 모든 것을 제공한다.
💡 LTS 버전(Long-Term Suppert)
- 장기 지원 버전을 의미하며 일반적으로 3년에서 5년까지 지원을 제공합니다.
💡 LTS 버전과 Stable 버전의 차이는 무엇인가?
- LTS의 경우 장기적으로 지원되는 버전으로 일반적으로 3년에서 5년까지 지원을 제공합니다.
- stable 버전의 경우 일반적인 업데이트 주기를 따르며, 새로운 기능이나 버그 수정이 추가되는 등 더 빈번하게 업데이트가 이루어집니다. 따라서, 안정성이나 보안성을 중요시하는 비즈니스나 엔터프라이즈 환경에서는 LTS 버전을 사용하는 것이 일반적입니다.
2. Java SE (Standard Edition), Java EE (Enterprise Edition), Java ME (Micro Edition)
💡 Java SE (Standard Edition)란?
- 일반적인 엔터프라이즈 애플리케이션을 개발하는 데 사용됩니다. 대부분의 Java 개발자는 Java SE를 사용하여 자바 애플리케이션 및 데스크톱 애플리케이션을 개발합니다.
💡 Java EE (Enterprise Edition) 란?
- 대규모, 기업급 애플리케이션 및 웹 애플리케이션을 개발하는 데 사용됩니다. Java EE는 Java SE를 기반으로 하며, 서버 측 컴포넌트를 개발하기 위한 여러 API와 스펙을 제공합니다.
💡 Java ME (Micro Edition) 란?
- 모바일, 임베디드 및 IoT 기기에서 실행되는 애플리케이션을 개발하는 데 사용됩니다. Java ME는 제한된 기능의 장치에서 실행되는 애플리케이션을 만들기 위한 다양한 API와 프레임워크를 제공합니다.
분류 | Java SE | Java EE | Java ME |
사용용도 | 일반적인 엔터프라이즈 및 데스크톱 애플리케이션 | 대규모, 기업급 애플리케이션 및 웹 애플리케이션 | 모바일, 임베디드 및 IoT 기기에서 실행되는 애플리케이션 |
주요 기능 | JVM, 컬렉션 프레임워크, 자바 네트워크 API 등 | EJB, JSP, 서블릿, JPA 등 | MIDP, CLDC, WMA 등 |
장점 | 큰 규모의 개발자 커뮤니티, 다양한 오픈소스 라이브러리, 우수한 보안성 | 서버 측 컴포넌트 개발의 표준, 풍부한 API 및 스펙 제공, 확장성 및 유연성 | 다양한 모바일 기기와의 호환성, 낮은 하드웨어 요구사항, 효율적인 배터리 사용 |
단점 | 서버 측 애플리케이션 개발에는 적합하지 않음 | 초기 구축 및 설정이 어려울 수 있음, 높은 메모리 사용량 | 제한된 기능의 장치에서만 실행 가능, 다른 에디션에 비해 API가 제한적 |
2) JDK(Java Development Kit)
💡Java Development Kit (JDK) 란?
- Java 프로그램을 개발하기 위해 필요한 도구 모음입니다. JDK는 Java 컴파일러, 디버깅 도구, 자바 가상 머신 (JVM) 등을 포함하고 있습니다.
[ 더 알아보기 ]
💡 JRE(Java Runtime Environment) 란?
- 자바 애플리케이션을 ‘실행하기 위한 환경’을 제공하는 소프트웨어입니다.
-이 소프트웨어는 자바 프로그램을 실행하기 위해 필요한 라이브러리, 실행환경 등을 포함하고 있어, 자바 프로그램이 운영체제와 하드웨어에 구애받지 않고 동작할 수 있도록 합니다
- 자바 애플리케이션을 실행할 수 있는 것뿐만 아니라, 자바 애플릿을 실행하는 데에도 필요합니다.
💡 JDK 중에서 LTS 버전을 사용하는 것을 권장하기에 각각 버전별로 간단하게 주요한 기능을 확인해 봅니다.
버전 | 출시 일자 |
java SE 8 (LTS) | 2014년 3월 18일 |
java SE 11 (LTS) | 2018년 9월 25일 |
java SE 17(LTS) | 2021년 9월 14일 |
java SE 21(LTS) | 2023년 9월 |
1. java SE 8(LTS) 주요 기능
💡 Java SE의 1.8 버전의 주요 기능들입니다.
주요 기능 | 설명 |
람다 표현식 추가 : Lambda expressions | 함수형 프로그래밍의 개념을 도입하여 코드의 가독성과 유지 보수성을 향상시킵니다. |
컬렉션, 스트림 API 추가: Collections, Stream API | 자료구조에서 데이터를 처리하는 방법을 단순화합니다. |
옵셔널 클래스 추가: Optional Class | null 값 처리를 보다 쉽고 명확하게 할 수 있도록 도와줍니다. |
인터페이스 개선 : Interface improvements | 인터페이스를 수정하지 않고도 새로운 기능을 추가할 수 있는 방법을 제공합니다. |
날짜 및 시간 API 추가: Date and Time API | Joda-Time 라이브러리에서 영감을 받아 설계된 새로운 날짜 및 시간 API로, 이전의 Date 및 Calendar 클래스보다 훨씬 강력하고 직관적입니다. |
2. java SE 11(LTS) 주요 기능
💡 Java SE의 11 버전의 주요 기능들입니다.
주요 기능 | 설명 |
지역 변수의 유형 추론 추가 | var 키워드를 사용하여 지역 변수를 선언할 수 있습니다. 이를 통해 코드의 가독성을 높이고, 반복적인 코드를 줄일 수 있습니다. |
HTTP 클라이언트 API 지원 | 기존의 HttpURLConnection 및 Apache HttpClient와 같은 기존 API보다 더욱 직관적이며, 비동기 처리와 스트림 API를 지원합니다. |
Epsilon GC 추가 | Epsilon GC는 가비지 컬렉션을 수행하지 않으며, 대신 메모리 할당 및 해제에 대한 성능을 최적화합니다. 이 기능은 대규모 메모리 집약적인 애플리케이션에서 유용합니다. |
ZGC (Z Garbage Collector) | 대규모 메모리를 가진 애플리케이션에서 사용할 수 있는 가장 최신의 Garbage Collector입니다. |
문자열 클래스의 새로운 메서드 추가 | isBlank(), lines(), strip(), stripLeading(), stripTrailing() 등의 새로운 문자열 메서드가 추가되었습니다. |
자바 파일 실행 | Java 11에서는 java 파일을 실행할 수 있도록 지원합니다. 이를 통해 Java 애플리케이션을 더욱 쉽게 실행할 수 있습니다. |
[ 더 알아보기 ]
💡 Garbage Collector(GC) 이란?
- 자바 가상 머신(JVM)에서 동작하는 ‘메모리 관리 기법’ 중 하나입니다. GC는 메모리 할당과 해제를 자동으로 처리하여 프로그래머가 메모리 관리를 수동으로 하지 않아도 되게 해 줍니다.
- 사용되지 않는 객체를 탐지하고, 해당 객체가 차지하고 있던 메모리를 해제합니다. 이를 통해 메모리 누수(memory leak)를 방지하고, 더욱 안정적인 프로그램을 만들 수 있게 됩니다.
💡 자바 가상 머신(JVM: Java Virtual Machine) 이란?
- 자바 프로그램을 실행하는 데 사용되는 가상 컴퓨터입니다. 운영체제와 독립적인 환경에서 실행될 수 있도록 해주며, 자바 프로그램이 메모리를 할당하고 해제하는 방법을 제어합니다.
3. java SE 17(LTS) 주요 기능
💡 Java SE의 17 버전의 주요 기능들입니다.
주요 기능 | 설명 |
Spring Boot 3.x 지원 | Java 17 버전 이후 Spring Boot 3.x를 지원합니다. |
봉인 클래스 추가 : Sealed Classes | 특정 클래스를 확장하거나 특정 인터페이스를 구현하는 클래스 집합을 제한할 수 있는 새로운 기능입니다. |
Pattern Matching for instanceof | 이 기능은 instanceof 연산을 통해 객체의 타입을 확인할 때, 더 편리하게 사용할 수 있도록 도와줍니다. |
Switch 표현 기능 향상 (Improved Switch Expressions) |
switch 표현식을 개선하여 switch 표현식에서 패턴 매칭을 사용할 수 있도록 했습니다. |
Foreign Function and Memory API | Java 내에서 네이티브 코드를 호출하고, 타입 안정적인 방법으로 네이티브 메모리에 액세스할 수 있는 방법을 제공합니다. |
향상된 의사 난수 생성기 (Enhanced Pseudo-Random Number Generators) |
성능과 보안성이 이전 생성기보다 더욱 향상된 새로운 의사 난수 생성기가 도입되었습니다. |
GC 개선 : Garbage Collector | 새로운 GC 알고리즘을 적용하여, 더 효율적인 메모리 관리가 가능해졌습니다. |
4. java SE 21(LTS) 주요 기능
💡 2023년 06월 기준으로 작성되었기에 2023년 09월에 출시되는 Java 21에 대해서는 추후 작성 예정입니다.
3) Open JDK
💡 Open JDK 란?
- ‘Java SE의 무료 및 오픈 소스 구현체’로 Java SE와 같은 API와 기능을 제공하며 호환성을 유지합니다.
[ 더 알아보기 ]
💡 Java SE(Standard Edition)
- Java 프로그래밍 언어의 표준 사양입니다. Java SE는 Java 애플리케이션을 구축하기 위한 기본 API(Application Programming Interface)를 제공합니다.
- Java SE는 Java ME(Micro Edition) 및 Java EE(Enterprise Edition)와 함께 Java Platform, Standard Edition(JPSE)의 일부입니다.
💡 Open JDK와 Java SE의 관계
- Java SE는 Java 프로그래밍 언어의 표준 사양으로, Java 애플리케이션을 구축하기 위한 기본 API(Application Programming Interface)를 제공하는 인터페이스입니다.
- Open JDK는 Java SE의 무료 및 오픈 소스 구현체로, Java SE에서 정의된 인터페이스를 구현한 구현체입니다.
1. Oracle Java SE Development Kit (JDK)
💡 Oracle Java SE Development Kit (JDK) 란?
- Java 프로그래밍 언어로 개발된 애플리케이션을 만들기 위한 도구 모음입니다.
- JDK는 Java Runtime Environment (JRE)와 함께 제공되며, 개발자가 Java 애플리케이션을 작성하고 실행할 수 있는 모든 도구와 라이브러리를 포함합니다.
- 해당 JDK는 2019년 4월부터 유료화가 되었으며 개인 및 개발자용으로는 무료이지만, 상업적 및 생산적 용도로 사용할 경우 유료입니다. 그렇기에 이후부터는 OpenJDK를 이용하게 되었습니다.
2. Open JDK 종류
💡 Open JDK의 경우는 오라클에서 만든 Java SE의 인터페이스를 기반으로 각각의 공급업체 혹은 커뮤니티에서 이에 대한 구현체를 구성하여 제공합니다. 또한 Open JDK의 경우는 무료 오픈소스이며 각각의 제공처에서 지원을 받고 있습니다.
이들의 차이는 JDK의 성능, 안정성, 보안등에 따라 상이할 수 있다고 합니다.
이름 | 공급업체 | 설명 |
OpenJDK | Red Hat | 레드햇에서 지원하는 오픈소스 OpenJDK. |
Corretto | Amazon | 아마존에서 만든 오픈소스 OpenJDK. |
Zulu | Azul | Azul에서 만든 오픈소스 OpenJDK. |
Zing | Azul | Azul에서 만든 고성능 유료 구현체. |
Liberica | BellSoft | BellSoft에서 만든 오픈소스 OpenJDK. |
Semeru Runtime | IBM | IBM에서 만든 오픈소스 OpenJDK. |
AdoptOpenJDK | Adoptium | Adoptium에서 만든 오픈소스 OpenJDK. |
Eclipse Adoptium | Adoptium | Eclipse에서 만든 AdoptOpenJDK. |
Microsoft Build of OpenJDK | Microsoft | 마이크로소프트에서 만든 오픈소스 OpenJDK. |
SAP Machine | SAP | SAP에서 만든 오픈소스 OpenJDK. |
Dragonwell | Alibaba | 알리바바에서 만든 오픈소스 OpenJDK. |
OpenLogic OpenJDK | OpenLogic | OpenLogic에서 만든 오픈소스 OpenJDK. |
오늘도 감사합니다. 😀
반응형
'Java > 이론 및 문법' 카테고리의 다른 글
[Java] 사용 목적에 따른 반복문(Loop) 이해하기 (0) | 2023.08.27 |
---|---|
[Java] 다양한 형 변환(Type Conversion) 방법 이해하기 : 캐스팅(Casting) (0) | 2023.08.26 |
[Java] UUID 이해 및 사용방법 (0) | 2023.03.09 |
[Java] Collection Framework(Queue, Stack, Deque)의 인터페이스와 구현체 이해하기 -2 : 정의 및 예시 (0) | 2023.03.08 |
[Java] Collection Framework(List, Map, Set)의 인터페이스와 구현체 이해하기 - 1 : 정의 및 예시 (0) | 2023.03.06 |