[Java] Java SE, JDK, JRE

Java SE, JDK, JRE


- Java SE(Java Platform, Standard Edition)는 자바의 표준안이다. 자바라는 언어가 어떠한 문법적인 구성을 가졌는지와 같은 것들을 정의하고 있다. 이것은 구체적인 소프트웨어가 아니고 그 소프트웨어의 설계도라고 할 수 있다. 소프트웨어에서는 설계도라는 표현 대신에 명세서(spec, specification)이라는 말을 사용한다. 이 명세서에 따라서 Java가 만들어지게 된다. Java SE 7은 버전 7에 대한 명세서이다. 자바는 계속 진화하고 있는 기술이다. 이 명세서는 JCP(Java Community Process, http://jcp.org)라는 조직을 통해서 만들어진다.


- JDK(Java Development Kit)는 Java SE의 표준안에 따라서 만들어진 구체적인 소프트웨어다. Java 개발자라면 JDK를 다운받아서 설치해야 한다. 여기에는 Java 프로그램을 실행하면 Java 코드를 컴파일하는 컴파일러와 개발에 필요한 각종 도구 그리고 JRE가 포함되어 있다. 즉 개발자를 위한 자바 버전이다.


- JRE(Java Runtime Environment)는 자바가 실제로 동작하는 데 필요한 JVM, 라이브러리, 각종 파일들이 포함되어 있다. 자바로 만들어진 프로그램을 구동하려고 한다면 이것을 설치한다. 일반인을 위한 자바 버전이라고 할 수 있다.


- JVM(Java Virtual Machine) JVM은 자바가 실제도 구동하는 환경이다. 자바로 만들어진 소프트웨어는 JVM이라는 가상화된 환경에서 구동되고, 하드웨어나 운영체제에 따라서 달라질 수 있는 호환성의 문제는 운영체제 버전에 따라서 만들어진 JVM이 알아서 해결한다. 즉 하나의 자바 프로그램을 만들면 어떤 환경에서도 실행할 수 있는 것이 바로 JVM의 역할이라고 할 수 있다.


JVM은 자바를 실행하기 위한 가상 기계라고 할 수 있다. 컴퓨터(머신)를 사용해서 자바를 실행하기 위한 가상 컴퓨터라고 이해하면 좋을 것이다.

가상 기계는 소프트웨어로 구현된 하드웨어를 뜻하는 넓은 의미의 용어이며, 컴퓨터의 성능이 향상됨에 따라 점점 더 많은 하드웨어들이 소프트웨어화되어 컴퓨터 속으로 들어오고 있다.

그 예로는 TV와 비디로를 스프트웨어한 윈도우 미디어 플레이어던가, 오디오 시스템을 소프트웨어화한 윈엠프 등이 있다.

이와 마찬가지로 '가상 컴퓨터'는 실제 컴퓨터(하드웨어)가 아닌 스프트웨어로 구현된 컴퓨터라는 뜻으로 컴퓨터 속의 컴퓨터라고 생각하면 된다.


자바로 작성된 어플리케이션은 모두 이 가상 컴퓨터에서만 실행되기 때문에, 자바 어플리케이션이 실행되기 위해서는 반드시 JVM이 필요하다.

이 관계를 그림으로 나타내면 아래와 같다.


cp.)

자바로 프로그래밍을 하기 위해서는 먼저 JDK를 설치해야 한다. JDK를 설치하면, 자바가상머신과 자바클래스 라이브러리외에 자바를 개발하는데 필요한 프로그램들이 설치된다.


(1) JDK의 bin 디렉터리의 주요 파일

1) javac.exe: 자바 컴파일러, 자바소스코드를 바이트코드로 컴파일한다.

c:\jdk1.6\work\javac Hello.java


2) java.exe: 자바 인터프리터, 컴파일러가 생성한 바이트코드를 해석하고 실행한다.

c:\jdk1.6\work\java Hello


3) javap.exe: 역어셈플러, 컴파일된 클래스파일을 원래의 소스로 변환한다.

c:\jdk1.6\javap Hello > Hello.java


vo.) 바이트코드

JVM이 이해할 수 있는 기계어, JVM은 바이트코드를 다시 해당 OS의 기계어로 변환되어 OS로 전달한다.


cf.) jar.exe: 압축프로그램, 클래스파일과 프로그램과 프로그램의 실행에 관련된 파일을 하나의 jar파일(.jar)로 압축하거나 압축해제한다.


cf.) JDK와 JRE

JDK: 자바개발도구

JRE: 자바실행환경


JDK: JRE + 개발에 필요한 실행파일(javac.exe등)

JRE: JVM+클래스라이브러리


프롬프트 창에서 자바 파일 실행

Hello.java 작성 ---> javac.exe --->Hello.class 생성 ---> java.exe ---> 실행



'Programing > Java' 카테고리의 다른 글

[Java] 변수의 종류  (0) 2014.12.14
[Java] abstract  (0) 2014.12.11
[Java] 인터페이스의 이해  (0) 2014.12.06
[Java] 형변환  (0) 2014.12.02
[Java] 실행  (0) 2014.12.02