Languages/Java

[Java] Java๋ž€? ( JVM / JRE / JDK )

MOONCO 2022. 7. 3. 01:00

๐Ÿ‘‰ Java๋ž€?

์–ด๋–ค CPU ์—์„œ๋ผ๋„, ์‹คํ–‰๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

 

Java์˜ ํŠน์ง•

๊ฐ€์ƒ ๋จธ์‹  ์‚ฌ์šฉ

๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉ ( ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ )

์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ๋ฐ”๋กœ ์‹คํ–‰๊ฐ€๋Šฅ - ์ธํ„ฐํ”„๋ฆฌํ„ฐ

๋ฉ”๋ชจ๋ฆฌ ์ž๋™ ๊ด€๋ฆฌ - C++์€ ์•ˆ๋จ

์“ฐ๋ ˆ๋“œ ๊ด€๋ฆฌ API ์ œ๊ณต - ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ๊ตฌํ˜„ ์‰ฌ์›€

ํ•„์š”ํ•œ ํด๋ž˜์Šค๋งŒ ๋กœ๋“œ - ๋™์  ๋กœ๋”ฉ

TCP/IP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์›

http, htp ํ”„๋กœํ† ์ฝœ ์ง€์›

 

๐Ÿ‘‰ JVM์ด๋ž€?

Java๋กœ ์“ฐ์—ฌ์ง„ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์ƒ๋จธ์‹ 

(Java Virtual Machine)

 

C์–ธ์–ด๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๋กœ ์ปดํŒŒ์ผ ํ•˜๋ฏ€๋กœ, CPU๋งˆ๋‹ค ๊ฐ๊ฐ์˜ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ,

Java๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ Javaํด๋ž˜์Šค ํŒŒ์ผ๋กœ ๋ฒˆ์—ญ( ๋ฐ”์ดํŠธ ์ฝ”๋“œ )ํ•˜๊ณ ,

JVM์˜ excution์ด ํด๋ž˜์ŠคํŒŒ์ผ์„ ๊ธฐ๊ณ„์–ด๋กœ ( ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ )๋กœ ๋ฒˆ์—ญ ํ•œ๋‹ค.

( OS ๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๋ฐ”๊ฟ”์คŒ )

 

JVM์ด OS๋กœ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›์•„ ์‚ฌ์šฉํ•˜๊ณ 

๋‹ค๋ฅธ ์–ธ์–ด๋“ค์˜ ํ•จ์ˆ˜(๋ฉ”์„œ๋“œ) ํ˜ธ์ถœ์„ ์œ„ํ•ด, ์–ธ์–ด์— ๋งž๊ฒŒ Stack์„ ๋งŒ๋“ ๋‹ค.

 

๐Ÿ‘‰ JRE๋ž€?

์ž๋ฐ” ์‹คํ–‰ ํ™˜๊ฒฝ
Java Runtime Environment

- ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์„ ์œ„ํ•ด, ํด๋ž˜์Šค ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

 

๐Ÿ‘‰ JDK๋ž€?

์ž๋ฐ” ๊ฐœ๋ฐœ ํ‚คํŠธ
Java Development Kit

- ์ž๋ฐ” ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋„๊ตฌ(Tool)๋“ค์„ ๋ชจ์•„ ๋†“์€ ํŒจํ‚ค์ง€

JVM > JRE > JDK

 

๐Ÿ‘‰ ํŠน์ง•

 

Java ํ”„๋กœ๊ทธ๋žจ์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํด๋ž˜์Šค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

ํด๋ž˜์Šค๋Š” ํ•„๋“œ(์†์„ฑ)์™€ ๋ฉ”์†Œ๋“œ(๊ธฐ๋Šฅ)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

Java์—์„œ, ํด๋ž˜์Šค์™€ ๊ฐ์ฒด๋Š” ๊ฐ™์€๋ง
class {
  field
  method
}

 

main() ๋ฉ”์„œ๋“œ

- ๋งจ์ฒ˜์Œ ์‹คํ–‰๋˜๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ
- main() ๋ฉ”์„œ๋“œ๋ฅผ ์ง€๋‹ˆ๋Š” ํด๋ž˜์Šค๊ฐ€ ์—†์œผ๋ฉด, ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.
class Hello {
  public static void main(String[] args)
  {
  	System.out.println("์•ˆ๋…•ํ•˜์„ธ์š”!");
  }
}

 

Window๋Š” ks94๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

3๋ฐ”์ดํŠธ ์ฒด๊ณ„๋ฏ€๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค.

utf-8 ์ž„์„ ์•Œ๋ ค์ฃผ์–ด์•ผ ํ•œ๋‹ค.

javac -encoding utf-8 Hello.java

 

๐Ÿ‘‰ java ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

 

์‹คํ–‰ ์˜์—ญ ๋ฉ”๋ชจ๋ฆฌ, ์ €์žฅ ์˜์—ญ ๋ฉ”๋ชจ๋ฆฌ ( T๋ฉ”๋ชจ๋ฆฌ )

 

๐Ÿ‘‰ java ๊ตฌ๋™ ๊ณผ์ •

 

jre๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€ main() ๋ฉ”์„œ๋“œ ๊ฒ€์ƒ‰

main() ๋ฉ”์„œ๋“œ ๊ฐ์ง€์‹œ, jvm ๋ถ€ํŒ…

jvm์ด ๋ชฉ์  ํŒŒ์ผ ๋ฐ›์•„ ์‹คํ–‰

-----------------------------static-----------------------------

๋ชฉ์  ํŒŒ์ผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ํŒจํ‚ค์ง€ ๋ถˆ๋Ÿฌ์˜ด ( java.lang )
ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€ ๋ชจ๋“  ํŒจํ‚ค์ง€ ๋ถˆ๋Ÿฌ์˜ด
ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€ ๋ชจ๋“  ํด๋ž˜์Šค ๋ถˆ๋Ÿฌ์˜ด

-----------------------------stack-----------------------------

main() ๋ฉ”์„œ๋“œ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ stack frame ์ƒ์„ฑ
main() ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€ ์ค‘๊ด„ํ˜ธ๋ฅผ ๋งŒ๋‚ ๋•Œ ๋งˆ๋‹ค stack frame ์ƒ์„ฑ
main() ๋ฉ”์„œ๋“œ์˜ ์ธ์ž ( args )๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„ ํ• ๋‹น

int i;  => ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ• ๋‹น - ์ดˆ๊ธฐํ™” ์•ˆ๋จ
i = 10 => ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— 10 ์ €์žฅ
double d = 20.0; => ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ• ๋‹น, 20.0 ์ €์žฅ

-----------------------------heap-----------------------------

Car c1 = new Car(); => ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ• ๋•…, ๊ฐ์ฒด ์ƒ์„ฑ ( heap )
Garbage Collector๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด ์‚ญ์ œ ( heap )

 

๋ฐ˜์‘ํ˜•