자바 플랫폼은 자바 프로그래밍 언어로 쓰여진 프로그램들을 개발하고 실행하는것을 가능하게 하는 프로그램들의 세트이다. 자바 플랫폼은 (가상머신이라 불리는)실행 엔진, 컴파일러와 라이브러리 집합을 포함한다. 자바 플랫폼은 자바 프로그램이 다양한 하드웨어와 운영체제에서 동일하게 실행시키게 할 셈으로 그것들을 위해 구현되었다.
자바 플랫폼은 전체 능력의 일부분을 제공하는 각각의 프로그램들로 구성되어있다. 예를 들어 자바 코드를 자바 바이트코드로 바꿔주는 자바 컴파일러는 JDK의 부분으로서 제공된다. JVM을 JIT컴파일러로 보완하는 JRE는 중간의 바이트코드를 즉석에서 네이티브 머신 코드로 바꾼다. 자바 플랫폼은 광범위한 라이브러리 집합도 포함한다.
플랫폼에서 필수적인 요소는 자바 언어 컴파일러, 라이브러리들, 가상 머신 사양에 명시된 규칙에 따라 자바 중간 바이트코드가 실행되는 런타임 환경이다.
1. Application domains
다른 플랫폼은 다른 장치 및 응용프로그램 도메인의 클래스들을 목적으로 한다
1.1. Java SE = Standard Edition
데스크탑과 서버 환경을 위한 이동 가능한 코드를 개발하고 배치하기 위한 컴퓨팅 플랫폼이다. 이 플랫폼은 자바 프로그래밍 언어를 사용하고, 자바 소프트웨어 플랫폼 가족의 일부이다. Java SE는 일반적인 목적 범위의 API를 정의한다 - Java Class Library를 위한 Java API같은것 - 그리고 또한 자바 언어 사양과 자바 가상 머신 사양을 포함한다.
모든 자바 프로그래머가 배워야 할 모든 라이브러리와 API를 가지고있다.
oracle Java SE 페이지: https://www.oracle.com/java/technologies/java-se-glance.html
wikipedia: https://en.wikipedia.org/wiki/Java_Platform,_Standard_Edition
1.2. Java EE (Jakarta EE) = Enterprise Edition
Java SE와 분산 컴퓨터나 웹 서비스 같은 기업 특성을 위한 사양을 가진 사양의 집합이다.
oracle Java EE 페이지: https://www.oracle.com/java/technologies/java-ee-glance.html
wikipedia: https://en.wikipedia.org/wiki/Jakarta_EE
1.3. Java ME = Micro Edition
셋톱박스, 센서, 프린터, 모바일 핸드폰, iot기기같은 임베디드 시스템이나 모바일 기기의 이동 가능한 코드를 개발하고 배치하기 위한 컴퓨팅 플랫폼이다. Java SE 기능의 부분집합을 지원하지만, 모바일 장치만의 특정한 라이브러리도 제공한다.
oracle Java ME 페이지: https://www.oracle.com/java/technologies/javameoverview.html
wikipedia: https://en.wikipedia.org/wiki/Java_Platform,_Micro_Edition
2. 자바 가상 머신 (Java virtual machine)
자바 플랫폼의 심장은 자바 바이트코드 프로그램을 실행하는 "가상 머신"이다. 이 바이트코드는 프로그램을 실행시키는 어떤 하드웨어나 운영체제든 상관하지 않고 똑같다. 그러나 Java 10 이하의 새로운 버전들은 약간의 변동 사항을 적용하여 일반적으로 바이트코드는 상위 호환성을 가진다. JVM안에 JIT (Just In Time) 컴파일러가 있다. JIT 컴파일러는 자바 바이트코드를 런타임에 네이티브 프로세서 명령으로 번역하며, 실행중에 메모리에 네이티브 코드를 캐시에 저장한다.
바이트코드를 중간 언어로 허락하는것은 가상 머신이 있는 어떠한 플랫폼에서도 자바 프로그램을 실행시킬 수 있는 것을 허락한다. JIT 컴파일러를 쓰는것은 자바 응용 프로그램이 약간의 로딩 딜레이후 그것들의 모두 또는 대부분이 JIT컴파일하여 "워밍" 되자마자, 네이티브 프로그램과 비슷하게 빠르게 실행되는 경향이 있음을 의미한다. JRE 버전 1.2 이후로부터 Sun의 JVM 구현은 인터프리터 대신 JIT 컴파일러를 포함한다.
비록 자바 프로그램은 크로스 플랫폼 또는 플랫폼 독립적이지만, 이 프로그램들을 실행시키는 JVM은 그렇지 않다. 모든 작동 플랫폼은 고유의 JVM이 있다.
3. JDK (Java Development Kit)
JDK는 Oracle 기업 Java 기술의 배포판이다. 이것은 자바 언어 사양(JLS)와 자바 가상 머신 사양(JVMS)를 시행하고, Java API의 Standatd Edition을 제공한다. 오라클이 운영하는 커뮤니티 기반 OpenJDK의 파생 상품이다. 자바 응용 프로그램과 함께 작업하는 소프트웨어를 제공한다. 포함된 소프트웨어의 예시로는 자바 가상머신, 컴파일러, 성능 모니터링 툴, 디버거, 오라클이 자바 프로그래머들을 위해 유용한것을 고려한 유틸리티들이 있다.
오라클은 오라클 수수료 금지 약관 라이선스에 따라 현재 버전의 소프트웨어를 출시한다. 오라클은 윈도우, macOS, 리눅스 기반 운영체제를 위한 x86-64아키텍쳐와 macOS, Linux를 위한 aarch64아키텍처를 위한 바이너리들을 출시한다. 이전 버전들은 오라클 솔라리스 운영체제와 SPARC아키텍처를 지원한다.
오라클의 주요 JVMS 구현은 핫스팟(가상 머신)으로 알려져 있다.
4. JRE (Java Runtime Environment)
오라클이 출시한 자바 런타임 환경(JRE)는 독립된 JVM(핫스팟)과 자바 표준 라이브러리(자바 클래스 라이브러리)와 환경설정 도구와 브라우저 플러그인을 포함하는 무료 소프트웨어 배포판이다. 이것은 랩탑과 데스크탑 폼팩터인 개인 컴퓨터에 설치된 가장 흔한 자바 환경이다. JVM과 함께 제공되는 피처폰 및 초기 스마트폰을 포함한 모바일 폰들은 자바 플랫폼의 Micro Edition을 타켓으로 실행하는 응용 프로그램을 위한 JVM이 포함되었을 것이다. 한편 자바 앱들을 실행하는 현대의 스마트폰, 타블렛, 다른 소형기기 PC들은 JVM사양과 호환되지 않는 오픈소스 가상머신을 포함하는 안드로이드 운영체제의 지원을 통해 실행될 가능성이 높다. 자바 플랫폼 SE 9부터, 플랫폼 전체가 모듈로 그룹화되었다. Java SE의 모듈화 시행은 개발자들이 그들의 응용 프로그램과 함께 사용되는 모든 모듈을 묶을 하는것을 가능하게 한다, 사용자 장치에 적합한 Java SE 구현이 존재하는지 의존하는 대신.
5. 클래스 라이브러리 (Class libraries)
대부분의 현대 운영체제들에게, 대량의 재사용 가능한 코드는 프로그래머들의 일을 간소화하기 위해 제공된다. 이 코드는 보통 응용 프로그램이 런타일 때 호출할 수 있는 유동적으로 로드 가능한 라이브러리의 집합으로 제공된다. 왜냐하면, 자바 플랫폼은 특정한 운영체제의 의존적이지 않고 응용 프로그램은 이미 존재하는 운영체제 라이브러리에 의존할 수 없기 때문이다. 대신, 자바 플랫폼은 현대 운영체제에서 흔히 볼 수 있는 제사용 가능한 기능을 포함하는 포괄적인 고유의 스탠다드 클래스 라이브러리 세트를 제공한다. 대부분의 시스템 라이브러리 또한 Java로 작성되었다. 예를 들어, Swing 라이브러리는 유저 인터페이스를 칠하고 그것의 이벤트를 다룬다, 다른 플랫폼이 요소를 어떻게 다루는지에 대한 미묘한 차이는 제거한다.
자바 클래스 라이브러리는 자바 플랫폼에서 세가지 목적을 제공한다. 첫번째, 다른 표준 코드 라이브러리와 같이, 자바 라이브러리는 프로그래머에게 리스트의 아이템을 관리하거나 복잡한 문자열 파싱같은 잘 알려진 흔한 작업 수행을 위한 기능 세트를 제공한다. 두번째, 클래스 라이브러리는 보통 하드웨어와 운영체제에 의존하는 작업을 위한 추상적인 인터페이스를 제공한다. 네트워크 접근과 파일 접근과 같은 작업은 종종 각 플랫폼의 독특한 시행과 강하게 엮겨있다. java.net과 java.io 라이브러리는 네이티브 운영체제 코드에 추상적인 계층을 시행한다, 그리고 그 작업들을 시행하는 자바 응용프로그램을 위한 표준 인터페이스를 제공한다. 마지막, 몇몇 밑에있는 플랫폼이 자바 응용프로그램이 기대하는 요소를 지원하지 않으면, 클래스 라이브러리는 부족한 요소를 대체품을 제공해 에뮬레이션하거나, 적어도 특정 기능의 존재 여부를 일관되게 확인할 수 있는 방법을 제공해, 적절하게 다루어 일한다.
6. 언어들 (Languages)
"Java"단어는 보통 자바 플랫폼에서 사용되기 위해 디자인된 자바 프로그래밍 언어를 뜻한다. 프로그래밍 언어는 보통 "플랫폼" 문구의 범위를 벗어났지만 자바 프로그래밍 언어는 Java 7 전의 자바 플랫폼에서 핵심 부분이었다. 그래서 언어와 런타임은 보통 하나의 유닛으로 고려되었다. 그러나, Java 7 사양에서는 자바 언어와 자바 가상 머신을 더 이상 단일 단위로 간주하지 않도록 더 명확하게 처리하기 위해 노력했다.
타사에서 JVM을 타겟으로 하는 많은 컴파일러와 인터프리터들이 제작되었다.
- BeanShell
- Ceylon
- Clojure
- Gosu
- Groovy
- JRuby
- Jython
- Kotlin - 완전한 Java 상호 운용성을 갖춘JVM용 프로그래밍 언어 (안드로이드를 위한 구글 선호되는 언어)
- Rhino
- Scala
참조: https://en.wikipedia.org/wiki/Java_(software_platform)#Platform
https://stackoverflow.com/questions/2857376/difference-between-java-se-ee-me
-
'Java' 카테고리의 다른 글
Java Class (1) | 2024.09.07 |
---|---|
Java 연산자 우선순위 (Operator Precedence in Java) (0) | 2024.09.06 |
Java 자료형 (Java Data Types) (1) | 2024.09.06 |
Java 기본 문법 (0) | 2024.09.06 |
Java 설치, 실행 (0) | 2024.09.05 |