๐Ÿ›ฌ JDK์™€ JRE, JVM

JDK์™€ JRE

JDK - Java Development Kit

  • ์ž๋ฐ” ๊ฐœ๋ฐœ ํ‚คํŠธ์˜ ์•ฝ์ž๋กœ, ๊ฐœ๋ฐœ์ž๋“ค์ด ์ž๋ฐ”๋กœ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” SDKํ‚คํŠธ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ์ž๋ฐ” ๊ฐœ๋ฐœ์‹œ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€, javac, javadoc ๋“ฑ์˜ ๊ฐœ๋ฐœ๋„๊ตฌ๋ฅผ ํฌํ•จํ•œ๋‹ค.
  • ์ž๋ฐ” ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ์ธ JRE๋„ ํฌํ•จํ•œ๋‹ค. (JRE์—๋Š” JVM์ด ๋“ค์–ด๊ฐ€์žˆ๋‹ค.)
** SDK๋ž€? : Software Development Kit๋กœ ํ•˜ํŠธ์›จ์–ดํ”Œ๋žซํผ, ์šด์˜์ฒด์ œ ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ œ์ž‘์‚ฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํˆด.
- ๋Œ€ํ‘œ์ ์œผ๋กœ, ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ๋“ฑ์ด ์žˆ๋‹ค.

JDK ๋ฒ„์ „

  • Java SE(standard edition) : ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ํ‘œ์ค€ ์—๋””์…˜์˜ ์ž๋ฐ” ํ”Œ๋žซํผ.
  • Java EE(enterprise edition) : ๋Œ€๊ทœ๋ชจ ๊ธฐ์—…์šฉ ์—๋””์…˜. SE์˜ ํ™•์žฅํŒ
  • Java ME(micro edition) : ํ”ผ์ณํฐ/์…‹ํ†ฑ๋ฐ•์Šค/ํ”„๋ฆฐํ„ฐ ์™€ ๊ฐ™์€ ์ž‘์€ ์ž„๋ฒ ๋””๋“œ ๊ธฐ๊ธฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ์ด์šฉํ•˜๋Š” ์—๋””์…˜
  • Java FX : ๊ฐ€๋ณ๊ณ  ์˜ˆ์œ ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์—๋””์…˜

์‚ฌ๋žŒ๋“ค์ด JAVA๋ฅผ ์„ค์น˜ํ•œ๋‹ค๊ณ  ํ•˜๋Š”๊ฒƒ์€ JDK๋ฅผ ์„ค์น˜ํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

JDK์ž์ฒด๋Š” ์˜คํ”ˆ์†Œ์Šค์ด์ง€๋งŒ, ๋˜๋‹ค๋ฅธ JDK๋ฒ„์ „์„ ์—ฌ๋ŸฌํšŒ์‚ฌ์—์„œ ์ถœ์‹œํ–ˆ๊ณ , ์ง€๊ธˆ์˜ JDKํ™˜๊ฒฝ์ด ๊ฐ–์ถฐ์ก‹๋‹ค.

JRE - Java Runtime Environment

  • JRE๋Š” ์ž๋ฐ” ์‹คํ–‰ํ™˜๊ฒฝ์˜ ์•ฝ์ž๋กœ์„œ, JVM๊ณผ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ API๋ฅผ ํ•จ๊ป˜ ๋ฌถ์–ด์„œ ๋ฐฐํฌ๋˜๋Š” ํŒจํ‚ค์ง€.
  • ๋˜ํ•œ, ์ž๋ฐ” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํผํ‹ฐ ์„ธํŒ…๊ณผ ๋ฆฌ์†Œ์Šค(jar)ํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • JRE๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ JDK์— ํฌํ•จ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— JDK๋ฅผ ์„ค์น˜ํ•˜๋ฉด ํ•จ๊ป˜ ์„ค์น˜๋œ๋‹ค. Pasted image 20250110101642.png

java๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์ง์ ‘ ๊ฐœ๋ฐœํ•˜๋ ค๋ฉด JDK๊ฐ€ ํ•„์š”ํ•˜๊ณ ,

์ปดํŒŒ์ผ๋œ javaํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋ ค๋ฉด JRE๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

JVM - Java Virtual Machine

  • JVM์€ ์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ ์˜ ์•ฝ์ž๋กœ์„œ, ์ง์—ญํ•˜๋ฉด ์ž๋ฐ”๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋จธ์‹ , ์ž๋ฐ”๋ฅผ ๋Œ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.
  • ์ž๋ฐ”๋กœ ์ž‘์„ฑ๋œ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์€ JVM์—์„œ๋งŒ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ”๋Š—์‹œ ์ž๋ฐ” ๊ฐ€์ƒ๋จธ์‹ ์˜ ์„ค์น˜๊ฐ€ ์„ ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.

JVM์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์–ป๋Š” ๊ฐ€์žฅ ํฐ ์ด๋“์€ ์ž๋ฐ”ํ”„๋กœ๊ทธ๋žจ์„ ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์ œ์•ฝ์—†์ด ๋™์ž‘์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค.

JVM์ด ์™œ ํ•„์š”ํ• ๊นŒ?

  • java๋Š” OS์— ์ข…์†์ ์ด์ง€ ์•Š๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

c์–ธ์–ด๋ฅผ ์˜ˆ๋กœ ๋“ ๋‹ค๋ฉด,

  • ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๊ธฐ๊ณ„์–ด๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์—์„œ, window/mac/linux๊ฐ€ ๊ฐ๊ธฐ ๋‹ค๋ฅด๊ฒŒ ์ปดํŒŒ์ผ์„ ์‹œํ‚จ๋‹ค.

  • ๋•Œ๋ฌธ์— ๊ฐ OS๋ณ„๋กœ ์ƒ์ดํ•œ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š” ์ผ์ด ๋ฒŒ์–ด์ง„๋‹ค.

  • ์ด๋Ÿฌํ•œ ์–ธ์–ด๋ฅผ "์ด์‹์„ฑ์ด ๋‚ฎ๋‹ค" ๋ผ๊ณ  ํ‘œํ•œ๋‹ค.

  • ํ•˜์ง€๋งŒ java๋Š” jvm๋ฅผ ๊ฑฐ์ณ์„œ OS์™€ ์ƒํ˜ธ์ž‘์šฉ ํ•˜๊ธฐ๋•Œ๋ฌธ์—, OS์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.

JVM์€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”๊ฐ€?

  • ์œ„์—์„œ c์–ธ์–ด๋Š” ์ปดํŒŒ์ผ์„ ๊ฑฐ์น˜๋ฉด ๊ธฐ๊ณ„์–ด๊ฐ€ ๋œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ,
  • java๋Š” JVM์„ ๊ฑฐ์ณ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜๊ฒŒ ๋œ๋‹ค.
  • ์ด๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘๊ฐ„ ๋ ˆ๋ฒจ์˜ ์–ธ์–ด๋กœ, ๋ฐ˜์ชฝ์งœ๋ฆฌ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฌผ ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋Š” ์–ด๋– ํ•œ ํ™˜๊ฒฝ์— ์ข…์†์ ์ด์ง€ ์•Š๊ณ  ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฆ‰, ์žฌ์ปดํŒŒ์ผ ํ•  ํ•„์š”์—†์ด ๊ธฐ๊ณ„๊ฐ€ ๋ฐ”๋กœ ์ฝ๊ณ  ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๋Š”๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋‹ฌ๋ฆฌ JVM์€ ๊ฐ ์šด์˜์ฒด์ œ์— ์ข…์†์ ์ด๋ฏ€๋กœ, ๊ฐ ์šด์˜์ฒด์ œ์— ๋งž๋Š” JVM์„ ์•Œ๋งž๊ฒŒ ์„ค์น˜ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

JVM์˜ ๋‹จ์ 

  • ์œ„์˜ ์„ค๋ช…๊ณผ ๊ฐ™์ด java๋Š” ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ๋ณด๋‹ค JVM์ด๋ผ๋Š” ๋‹จ๊ณ„๋ฅผ ํ•œ ๋‹จ๊ณ„ ๋” ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์—, ์ƒ๋Œ€์ ์œผ๋กœ ์‹คํ–‰์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์„ ๋‚ดํฌํ•˜๊ณ  ์žˆ๋‹ค.
  • ์ด๋ฅผ ๋ณดํ™˜ํ•˜๊ธฐ ์œ„ํ•ด, ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ์„ ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊พธ์–ด ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๋Š” JIT ์ปดํŒŒ์ผ๋Ÿฌ ๊ฐ™์€ ๋‚ด๋ถ€ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์ง€๋งŒ, ๊ทธ๋Ÿผ์—๋„ ์—ฌ์ „ํžˆ ๋А๋ฆฌ๋‹ค.

Java์†Œ์Šค ์ปดํŒŒ์ผ ๊ณผ์ •

Pasted image 20250110103409.png

  • ์œ„ ๊ทธ๋ฆผ์—์„œ Compiler๋Š” javac.exe์— ํ•ด๋‹น๋˜๊ณ  JVM์€ java.exe์— ํ•ด๋‹น๋œ๋‹ค.
  1. ์†Œ์Šค์ฝ”๋“œ(MyPrograme.java)๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  2. ์ปดํŒŒ์ผ๋Ÿฌ(Compiler)๋Š” ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํด๋ž˜์Šค ํŒŒ์ผ(MyProgram.class)์„ ์ƒ์„ฑํ•œ๋‹ค. ์ปดํŒŒ์ผ ๋œ ํด๋ž˜์Šค ํŒŒ์ผ์€ JVM(Java Virtual Machine)์ด ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ ํŒŒ์ผ์ด๋‹ค.
  3. JVM์€ ํด๋ž˜์Šค ํŒŒ์ผ์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  4. MyProgram ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ์ปดํ“จํ„ฐ์— ๋ฐ˜์˜๋œ๋‹ค
์™œ ์ปดํŒŒ์ผ์„ ๋งˆ์นœ ํ”„๋กœ๊ทธ๋žจ์ด exe๊ฐ€ ์•„๋‹ˆ๋ผ, classํŒŒ์ผ์ผ๊นŒ?
  • c๋˜๋Š” c++๋“ฑ์œผ๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์€ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ๋กœ exeํŒŒ์ผ์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค.
  • java๋„ exeํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, classํŒŒ์ผ๋กœ ๊ตณ์ด ๋งŒ๋“ค์–ด๋‚ด๋Š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค
    • JVM์ด exe์— ํฌํ•จ๋˜๋Š” ํ˜•์‹์œผ๋กœ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— exeํŒŒ์ผ์ด ๋ฌด์ฒ™ ์ปค์ง€๊ฒŒ ๋˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
    • ๋•Œ๋ฌธ์— ๋ณดํ†ต์˜ ๊ฒฝ์šฐ ์ผ๋ถ€๋Ÿฌ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๊ฒƒ์ด๋‹ค.