
- JDK ≥ JRE ≥ JVM
JDK
- JDK 설치하면 JRE, JVM다 포함되어 설치됨
- 자바로 개발을 하지 않고 실행만 한다면 JRE만 설치해도 됨
- JDK에는 JRE에는 없는 javac(java compiler)가 존재함

JDK bin 디렉토리의 주요 실행파일
- javac.exe : 자바 컴파일러, 자바소스코드를 바이트코드(
.class
file)로컴파일
- java.exe : 자바 인터프리터, 컴파일러가 생성한 바이트코드를 해석하고 실행
- javap.exe: 역어셈블러, 컴파일된 클래스파일을 원래의 소스로 변환
- javadoc.exe : 자동문서 생성기. 소스파일에 있는 주석(/** */)을 이용하여 Java API 문서와 같은 형식의 문서를 자동으로 생성함
- jar.exe: 압축프로그램, 클래스파일과 프로그램의 실행에 관련된 파일을 하나의 jar파일로 압축하거나 압축해제함
JRE
- 자바 가상머신(
JVM
) + 자바 클래스 라이브러리(Java Class libraries
), 자바 클래스 로더(Java class loader
)
Class Library
와Class Loader
를 통해 컴파일된 클래스 파일(.class file)를 라이브러리와 결합한 후, JVM에 넘겨 실행함- java.io
- java.util
- java.thread 등
Class Loader
: 필요한 클래스들을 JVM 위로 올려주는 역할
Java Class Library
: 자바를 실행시키는 데 필수적인 라이브러리
- JRE는 그 자체로 특별한 기능을 한다기 보다 JVM이 원활히 잘 작동할 수 있도록 환경을 맞춰주는 역할
- JRE는 아래와 같은 구성요소를 번들로 제공함
- Java HotSpot Client 가상 머신이 사용하는 DLL 파일
- Java HotSpot Server 가상 머신이 사용하는 DLL 파일
- Java 런타임 환경에서 사용되는 코드 라이브러리 , 특성 설정 및 자원 파일 . ex) rt.jar, charsets.jar .
- 자바 확장 파일 과 같은 localedata.jar
- 보안 관리에 사용되는 파일(보안 정책 (
java.policy
) 및 보안 특성 (java.security
) 파일이 포함) - 애플릿에 대한 지원 클래스를 포함하는 jar 파일
- 플랫폼에서 사용하기위한 트루 타입 글꼴 파일 을 포함
JVM
- 자바 프로그램이 어느 기기, 어느 운영체제 상에서도 실행 되도록 해줌(Platform Independent)
- 자바 프로그램의 메모리 관리를 효율적으로 해줌(Garbage Collector)
- 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행시킴
Platform Independent
- JVM 상에서 돌아가므로 Platform Independent하게 돌아갈 수가 있음
- 자바 응용 프로그램은 운영체제나 하드웨어가 아닌 JVM하고만 통신하고 JVM이 자바 응용프로그램으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달을 함
- 자바로 작성된 프로그램은 운영체제에 독립적이지만 JVM은 운영체제에 종속적이어서 운영체제 별로 다른 버전의 JVM을 설치해야 함
- C나 C++같은 경우 컴파일러가 .exe파일을 만드는데 이는 OS에 dependent한 파일임. 이 파일을 다른 운영체제에서 돌리게 되면 정상적으로 동작을 하지 않음
- 일반 애플리케이션의 코드는 OS만 거치고 하드웨어로 전달되는데 비해 Java어플리케이션은 JVM을 한번 더 거치기 때문에 하드웨어에 맞게 완전히 컴파일된 상태가 아니고 실행 시에 해석되기 때문에 속도가 느리다는 단점이 있음 → 그러나 바이트코드(컴파일된 자바코드)를 하드웨어의 기계어로 바로 변환해주는 JIT컴파일러와 향상된 최적화 기술이 적용되어서 속도 격차 많이 줄음
자바 프로그램의 실행과정
>> java Hello
- 프로그램의 실행에 필요한 클래스(*.class 파일)를 로드함(클래스 로더가 하는 일)
- 클래스 파일을 검사한다.(파일 형식, 악성코드 체크)
- 지정된 클래스(Hello)에서 main(String[] args)를 호출
java cli 실행방법
- java -jar <jar file> : jar 파일에 Main-Class 매니페스트를 확인하여 메인 클레스를 실행
- java -classpath <jar 파일> < 기본 클래스> : jar 파일에서 기본 클래스를 찾아서 실행
코딩 컨벤션
- 패키지 - 소문자, 소문자-소문자(eg: web-server)
- 변수, 함수 선언(camel Notation): numOfStudent. 식으로 단어 바뀔 때마다 대문자
- class 이름은 대문자로 시작
- 하나의 .java 파일에는 public class 하나만. 그리고 그 소스 파일의 이름은 public class와 이름과 동일
- 다른 패키지에서 가져오려면 import