๊ด€๋ฆฌ ๋ฉ”๋‰ด

GO SIWOO!

[Java] ์ปดํŒŒ์ผ๋Ÿฌ(Compiler) & ์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpreter) ๊ทธ๋ฆฌ๊ณ  Java๋Š” ๋ฌด์Šจ์–ธ์–ด์ธ๊ฐ€? ๋ณธ๋ฌธ

Develop/์ž๋ฐ”(Java)

[Java] ์ปดํŒŒ์ผ๋Ÿฌ(Compiler) & ์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpreter) ๊ทธ๋ฆฌ๊ณ  Java๋Š” ๋ฌด์Šจ์–ธ์–ด์ธ๊ฐ€?

gosiwoo 2023. 3. 10. 18:26

๐Ÿ“Œ๊ฐœ์š”

์ปดํ“จํ„ฐ๋Š” ์‚ฌ๋žŒ์˜ ์–ธ์–ด ๋ฌธ๋ฒ•์— ๊ฐ€๊นŒ์šด ๊ณ ๊ธ‰ ์–ธ์–ด๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์—†๋‹ค. ์ด์™€ ๊ฐ™์€ ์ด์œ ๋กœ ๊ณ ๊ธ‰ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ €๊ธ‰ ์–ธ์–ด์ธ ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊ฟ”์•ผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. 

0๊ณผ 1์˜ 2์ง„์ˆ˜ ๋งŒ์„ ์ดํ•ดํ•˜๋Š” ์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ๋žŒ์ด ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค. ์ด ์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด๋Š” ์–ด์…ˆ๋ธ”๋Ÿฌ๋ฅผ ํ†ตํ•ด 2์ง„์ˆ˜๋กœ ๋ณ€๊ฒฝํ•ด ์ปดํ“จํ„ฐ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

1950๋…„๋Œ€์— High-level Language, ๊ณ ๊ธ‰ ์–ธ์–ด๋ผ๋Š” ๊ฐœ๋…์ด ๋“ฑ์žฅํ•˜๊ณ  ์‚ฌ๋žŒ์˜ ์–ธ์–ด ๋ฌธ๋ฒ•๊ณผ ๋”๋”์šฑ ๊ฐ€๊นŒ์šด, ์šฐ๋ฆฌ๊ฐ€ ๋ถ€๋ฅด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด java, C, Python ๋“ฑ์ด ์—ฌ๊ธฐ์— ์†ํ•˜๊ฒŒ ๋œ๋‹ค.

๊ณ ๊ธ‰ ์–ธ์–ด ๋˜ํ•œ ์–ด์…ˆ๋ธ”๋Ÿฌ๊ฐ€ ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๋€Œ๋“ฏ์ด ๋ฐ”๊ฟ”์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ด ์—ญํ• ์€ ์ปดํŒŒ์ผ๋Ÿฌ(Compiler)์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpreter)๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๋‘˜์€ ์–ด๋А ์ฐจ์ด๊ฐ€ ์žˆ์„๊นŒ? 

 

 

๐Ÿ“Œ์ปดํŒŒ์ผ๋Ÿฌ(Compiler)?

  • ์ „์ฒด ์ฝ”๋“œ๋ฅผ Runtime ์ด์ „์— ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ OS๋กœ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๋Š”๋‹ค.
  • ์†Œ์Šค์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผ์„ ํ†ตํ•ด ๊ธฐ๊ณ„์–ด ์†Œ์Šค์ฝ”๋“œ๋กœ ๋ฐ”๊พธ์–ด ์ค€๋‹ค.
  • ์‹คํ–‰ ์†๋„๊ฐ€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ณด๋‹ค ๋น ๋ฅด๋‹ค.
  • ์ปดํŒŒ์ผ์„ ํ•œ ํ™˜๊ฒฝ์— ์ข…์†๋˜์–ด ๋งŒ์•ฝ Linux ํ™˜๊ฒฝ์—์„œ ์ปดํŒŒ์ผ์„ ์ง„ํ–‰ ํ–ˆ๋‹ค๋ฉด Window ํ™˜๊ฒฝ์—์„œ ์ œํ•œ์ ์ด๋‹ค.
  • ์‹คํ–‰ ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.

 

 

๐Ÿ“Œ์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpreter)?

  • ์ „์ฒด ์ฝ”๋“œ๋ฅผ Runtime์— ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— OS๋กœ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๋Š”๋‹ค.
  • ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ•œ์ค„์”ฉ ๋ฒˆ์—ญํ•˜์—ฌ ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊พผ๋‹ค.
  • ์ปดํŒŒ์ผ ํ™˜๊ฒฝ์— ์ข…์†๋˜์ง€ ์•Š๋Š”๋‹ค. (ํ•ด๋‹น ํ”Œ๋žซํผ์— ๋งž๊ฒŒ ๋ฒˆ์—ญ์„ ํ•œ๋‹ค)

์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ (์ถœ์ฒ˜ : https://www.guru99.com/difference-compiler-vs-interpreter.html)

 

 

๐Ÿ“ŒJava์˜ ์ปดํŒŒ์ผ์€?

Java ์ปดํŒŒ์ผ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ(. java) ์ž‘์„ฑ
2. ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ(javac.exe)๊ฐ€ ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ(. java)๋ฅผ ๋ฐ”์ดํŠธ ์ฝ”๋“œ(. class)๋กœ ์ปดํŒŒ์ผ
3. ๋ฐ”์ดํŠธ ์ฝ”๋“œ(. class)๋ฅผ JVM์˜ ํด๋ž˜์Šค ๋กœ๋”(Class Loader)์—๊ฒŒ ์ „๋‹ฌ
4. ํด๋ž˜์Šค ๋กœ๋”(Class Loader)๋Š” ๋™์ ๋กœ๋”ฉ์„ ํ†ตํ•ด JVM์˜ ๋ฉ”๋ชจ๋ฆฌ(Runtime Data Areas)์— ์˜ฌ๋ฆฐ๋‹ค
5. ์‹คํ–‰ ์—”์ง„(Execution Engine)์ด JVM ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜จ ๋ฐ”์ดํŠธ ์ฝ”๋“œ(. class)๋“ค์„ ์‹คํ–‰

 

์šฐ์„  ์„ค๋ช…ํ•˜์ž๋ฉด ์ž๋ฐ”๋Š” ์ปดํŒŒ์ผ ์–ธ์–ด์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด์˜ ํŠน์ง•์„ ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ๊ฐ–๊ณ  ์žˆ๋‹ค.

์ž๋ฐ”๋Š” ์ปดํŒŒ์ผ๋Ÿฌ(javac.exe)๋ฅผ ํ†ตํ•ด์„œ ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค. ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ JVM์˜ ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด JVM์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๊ณ  ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ํ†ตํ•ด ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” 2์ง„ ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

 

์ž๋ฐ”์˜ ์ปดํŒŒ์ผ (์ถœ์ฒ˜ : https://www.javatpoint.com/java-interpreter)

ํ•˜์ง€๋งŒ ์œ„์™€ ๊ฐ™์€ 2๋ฒˆ์˜ ๋ฒˆ์—ญ ๊ณผ์ •์„ ๋น„ํšจ์œจ ์ ์ด๋ผ ์ƒ๊ฐํ•ด JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•œ ๋ฐฉ์‹์ด ์ƒ๊ฒผ๋‹ค. JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ „์ฒด๋ฅผ ํ™•์ธํ•œ ํ›„ ์ค‘๋ณต๋œ ๋ถ€๋ถ„์„ ๋ฏธ๋ฆฌ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•ด ์ €์žฅํ•ด ๋‘๊ณ  ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์„ ํ†ตํ•ด ๋ฒˆ์—ญ ์ค‘ ์ค‘๋ณต๋œ ๋ถ€๋ถ„์„ ๋งŒ๋‚˜๋ฉด ์ด๋ฏธ ๋ณ€ํ™˜๋œ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

 

 

 

์ž๋ฐ”์˜ ์ปดํŒŒ์ผ์— ๊ด€ํ•ด์„œ ๋” ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด...

 

[์ž๋ฐ”(Java)] JVM์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€ & Java ์ปดํŒŒ์ผ & JVM ๋‚ด๋ถ€ ๊ตฌ์กฐ

๐Ÿ“ŒJVM์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€? ๊ธฐ์กด์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ๋Š” ํฌ๋กœ์Šค ์ปดํŒŒ์ผ์„ ํ†ตํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ”Œ๋žซํผ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ–ˆ๋‹ค. ์˜ˆ๋กœ ์œˆ๋„์šฐ์—์„œ

gosiwoo.tistory.com