JVM, JRE , JDK

J-USER·2021년 8월 25일
0

JAVA

목록 보기
2/5
post-thumbnail

자바 코드를 보기도 전에 먼저보는 JVM, 그리고 이클립스에 프로젝트를 생성하면 보이는 JRM... 추가 플러그인을 설치할때 받는 JDK... 헷갈리니까 정리 한번 해보도록 하겠습니다.

JVM

한 번 쓰고 모든 곳에서 실행한다
-Java-

위의 원칙을 고수하기 위해 나온것이 JVM 입니다.

🙋 그래서 JVM이 뭔데요?
🤖 그저 하나의 프로그램입니다.

Java Vertual Muchine. 끝에 머신이 들어가서 좀 있어보이지만, JVM은 그저 하나의 프로그램일 뿐입니다.

🙋 그럼 뭐하는 프로그램인데??
🤖 컴파일.

네 맞습니다. 일반적인 코드, java, C, c++ 등등은 사실 인간의 편의를 위해 만들어진 언어입니다. 그래서 0101111100 로 이해하는 컴퓨터는 우리의 코드를 읽지 못하죠. 그리고 그걸로 작성하면 아주 빠르겠지만 그렇게 할 수 있는 사람은 제가 아는 사람중에서는 폰 노이만 밖에 없습니다.

그래서 우리가 작성한 코드를 컴퓨터가 이해할 수 있도록 번역해주는 것이 흔히 알고있는 컴파일러의 역할이죠.

🙋 아니 그럼 C 에 붙어있는 컴파일러랑은 뭐가 다른데요???

안타깝게도 컴퓨터들이라고 또 같은 기계어를 쓰는건 아닙니다. 001이 hello라고 치면 윈도우는 hello로 나오지만 , ios의 경우 bye로 인식할 수 있다는 이야기입니다.

🤯 아니...그럼 매 컴퓨터마다 새롭게 컴파일을 돌려야 실행이 되는건가요...??

네 바로 저런 문제점을 해결하기 위해 나온것이 자바의 JVM입니다.
위의 원칙 기억 나시죠? 자바는 각 컴퓨터마다 JVM이라는 전담 통역센터가 있어서 자바로 코딩을하면, 0101의 기계어로 번역하는 것이 아니라, 바이트코드라는 것이 생성됩니다.
(사람 - (바이트코드) - 기계어 )

그래서 만약 컴퓨터가 이 코드를 실행할때 되면, JVM에 있는 바이트 코드를 그때그때 기계어로 번역해서 사용하게 됩니다.

이렇게 JVM 처럼 주어진 코드를 실행 시점에 그때그때 기계어로 번역하는 방식을 Just In Time 컴파일러 = JIT 컴파일러 라고 부릅니다.

JRE

JRE는 Java Runtime Environment 의 약자로 여기서 나오는 런타임을 잠깐 짚고 가자면, 런타임은 컴파일 타임과 대조되는 개념입니다.

컴파일 : 코드를 실행하기 전에 미리 해두는 번역 작업을 하는 시점.
런타임 : 코드를 실행하는 시점을 의미.

그래서 정리하자면, JRE는 자바로 짠 코드가 컴파일 및 빌드까지 다 된 다음 이를 사용할 곳에 실행이 될때, 그 환경 요소들로서 필요한 것들을 의미합니다.

🙋 아니,,,말도 어렵고 그냥 실행하면 되는거 아니에요?
🤖 응 아니야

예를 들어 자바의 자료구조인 List,Map,Set 을 사용할 때 직접 구현하지 않아도 사용할 수 있습니다.
이는 이미 바이트코드로 컴파일된 클래스(.class) 이기 때문에 가져다가 쓰기만 하면 되기 때문입니다.

그래서 이처럼 널리 쓰이는 JVM에서 도는 라이브러리들을 JVM이랑 세트로 다운받아 설치할 수 있도록 한게 바로 JRE 입니다.

🙋 아무것도 안해도 제어판에 들어가면 자바 있는게 이거 때문인가여,,,?
🤖 삐빅...정답.

어떤 컴퓨터든 이 JRE만 깔리면 자바로 작성한 프로그램을 돌릴 수 있게 되기 때문이죠.

🤬 아니 JVM이 그런거라면서요!!!!!
🤖 JRE가 JVM 포함하고있음 ㅋ.
🙋 아니 그런데 오라클 들어가보니까 JRE 가 안보이고 JDK 파일밖에 없는데 뭐임???!?!?!

JDK

JDK는 Java Development Kit 말그대로 자바 개발 도구를 의미합니다.
JRE가 JVM을 포함하는 것처럼, JDK도 JRE를 포함하고 있습니다.

거기에 개발에 필요한 자바 코드 컴파일 할 때 쓰는 javac , 디버깅 할때 필요한 jdb , 서로 연관있는 클래스들을 하나의 JAR 파일로 묶어주는 jar 등 프로그래머를 위한 기능들도 많이 탑재하고 있습니다.

🙋 JDK도 종류가 여러가지 있던데요??
🤖 무료, 유료가 있져.
🙋 무료, 유료 왜 달라용?
🤖 아무래도 유료가 성능이나 안정성, 최신 기능 등 낫긴하지만 무료도 아주 쓸만하니 고민 ㄴㄴ

profile
호기심많은 개발자

0개의 댓글