자바를 공부해본 사람이라면 자바는 플랫폼에 독립적이고, WORA("Write Once Run Anywhere" - 한 번 작성하면 모든 곳에서 돌릴 수 있다)는 말을 들어봤을 것이다.
public class Main {
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
System.out.println("%d ", i);
}
}
}
우리가 위와 같이 자바로 코드를 작성하면 컴퓨터는 이 내용을 바로 이해하지 못한다. 그래서 우리는 우리가 작성한 코드를 컴퓨터가 이해할 수 있게 바꿔주는 과정이 필요하다. 이걸 코드를 번역(Compile) 한다고 한다.
작성한 언어를 번역하느냐, 혹은 통역(Interpret) 하느냐에 따라 나뉠 수 있는데 자바는 바로 컴파일 되는 언어이다.
그럼 이제 작성한 언어를 컴파일 시킨 후 컴퓨터를 이해시켜야 한다. 그런데 여기서 문제가 발생한다. 컴파일러는 같은 형식의 기계어를 만들어내지만, 각 OS 환경에 맞춰진 독자적인 컴파일러기 때문에 다른 환경에서는 이해하지 못하게 된다.
그래서 개발자들은 각 OS에 맞춰서 따로 따로 컴파일을 해야만 했다. 여기서 자바는 획기적인 방식을 도입하게 된다. 각 OS에 JVM(Java Virtual Machine)을 설치하는 것이다. JVM은 가상 CPU로 각 OS에 언어를 할 줄 알며, 자바 바이트 코드를 읽고 각 OS의 언어로 번역해주는 역할을 한다.
다만 이렇게 좋은 방식에도 단점이 있기 마련이다. 자바 프로그램은 일반 프로그램보다 JVM 단계를 거쳐야 함으로 실행 속도가 느리다는 단점이 존재한다.
JRE (Java Runtime Environment) & JDK (Java Development Kit)
JRE는 자바 실행환경의 약자로서, JVM과 자바 프로그램을 실행 시킬 때 필요한 라이브러리 API를 함께 묶어서 배포되는 패키지이다.
JDK는 자바 개발키트의 약자로 개발자들이 자바로 개발하는 데 사용되는 SDK 키트이다. JVM이 받아들이는 자바 바이트 코드를 컴파일하는 컴파일러, 인터프리터 등등이 바로 개발 도구에 존재한다.
이렇게 해서 JVM, JRE 그리고 JDK에 대해 간략하게 알아보았다.
JVM의 내부 구조와 동작에 관해 더 자세히 알고싶다면 아래의 게시글을 참고하길 바란다.
'Android > Java' 카테고리의 다른 글
JVM과 커널의 동작 (0) | 2023.06.26 |
---|---|
Reflection (리플렉션) (0) | 2023.06.11 |
JVM의 내부 구조와 작동 (0) | 2023.06.10 |