...

์๋ฐ๋ฅผ ์ฒ์ ์ค์นํ๋ฉด C:\Program Files\Java ํด๋์ ์๋์ ๊ฐ์ด JDK์ JRE ๊ฐ ๊ฐ๊ฐ ์ค์น๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด JDK์ JRE์ ์ญํ ์ ๋ฌด์์ธ์ง ๊ทธ๋ฆฌ๊ณ ์๋ฐ ํ๋ก๊ทธ๋จ(JVM)์ ์ด๋ค์์ผ๋ก ๋์๊ฐ๋์ง์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด์.

JDK (Java Development Kit)
JDK๋ ์๋ฐ ๊ฐ๋ฐํคํธ(Java Development Kit)์ ์ฝ์๋ก ๊ฐ๋ฐ์๋ค์ด ์๋ฐ๋ก ๊ฐ๋ฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ SDK ํคํธ๋ผ ์๊ฐํ๋ฉด ๋๋ค.
๊ทธ๋์ JDK์์๋ ์๋ฐ๋ฅผ ๊ฐ๋ฐ ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๊ณผ javac, javadoc ๋ฑ์ ๊ฐ๋ฐ ๋๊ตฌ๋ค์ ํฌํจ๋์ด ์๊ณ , ๊ฐ๋ฐ์ ํ๋ ค๋ฉด ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํ๋ ์์ผ์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ค์์ ๋ฐฐ์ธ JRE(Java Runtime Environment)๋ ํจ๊ป ํฌํจ๋์ด ์๋ค.
๐ก SDK๋?
Software Development Kit (์ํํธ์จ์ด ๊ฐ๋ฐ ํคํธ) ๋ก, ํ๋์จ์ด ํ๋ซํผ, ์ด์์ฒด์ ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ ์์ฌ๊ฐ ์ ๊ณตํ๋ ํด์ด๋ค. ํคํธ์ ์์๋ ์ ์์ฌ๋ง๋ค ๋ค๋ฅด๋ค.
SDK์ ๋ํ์ ์ธ ์๋ก, ์๋๋ก์ด๋ ์คํ๋์ค ๋ฑ์ด ์๋ค. ์ด SDK๋ฅผ ํ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋ค.
์๋ ๊ทธ๋ฆผ์์ ๋ณผ์ ์๋ฏ์ด JDK๋ JVM, JRE๋ฅผ ๋ชจ๋ ํฌํจํ๊ณ , ์ด์ธ์ ์๋ฐ๋ฅผ ๊ฐ๋ฐ ํ๋๋ฐ ํ์ํ development tools ๋ ํฌํจํ๊ณ ์๋ ๊ฑธ ์ ์ ์๋ค.

JDK ๋ฒ์ ํ๊ธฐ
์๋ฐ์ ๋ฒ์ ์ ํํํ ๋์๋ ๋ณดํต JDK ๋๋ Java SE ๋ฒ์ ์ผ๋ก ๋ํ๋ธ๋ค.
์ด๊ธฐ ๋ฒ์ ์ธ 1.0/1.1 ๋ฒ์ ์์๋ JDK 1.0 / JDK 1.2 ์ด๋ฐ์์ผ๋ก ๋ฒ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ง๋ง, JDK 1.2๋ฅผ ๋ฐํํ๋ฉด์ J2SE๋ก ๋ณ๊ฒฝํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ J2SE(Java2 Standard Edition)๋ผ๋ ๋ช ์นญ ๋ํ, 2006๋ JDK 1.6๋ถํฐ Java SE(Java Standard Edition)๋ก ๋ณ๊ฒฝ๋๋ค.
์ค์ ๋ก JDK ๋ค์ด๋ก๋ ํ๋ ๊ณต์ ์ฌ์ดํธ์ ๊ฐ๋ฉด ๋ค์๊ณผ ๊ฐ์ด JAVA ๋ฒ์ ์ด ํ๊ธฐ ๋์ด ์๋ ๊ฑธ ๋ณผ ์ ์๋ค.

- Java SE(Java Standard Edition) : ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ํ์ค ์๋์
์ ์๋ฐ ํ๋ซํผ์ผ๋ก ์๋ฐ ์ธ์ด์ ํต์ฌ ๊ธฐ๋ฅ์ ์ ๊ณต
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํด๋์ค ํจํค์ง๋ก ๊ตฌ์ฑ
- PC์ฉ ์ดํ๋ฆฌ์ผ์ด์ , ์ ํ๋ฆฟ๊ฐ๋ฐ, ์์ฉํ๋ก๊ทธ๋จ๊ฐ๋ฐ, ์น๊ฐ๋ฐ, ์๋๋ก์ด๋๊ฐ๋ฐ
-
PC์ ์ค์นํด์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ ๊ด๋ จ๋ ๊ฒ
- Java EE(Java Enterprise Edition) : ๋๊ท๋ชจ ๊ธฐ์
์ฉ ์๋์
. SEํ์ฅํ(๋ํ ๋คํธ์ํฌํ๊ฒฝ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์)
- ๊ธฐ์ ํ๊ฒฝ์ ์ํ ๋๊ท๋ชจ ์๋ฃจ์ ๊ฐ๋ฐ, ๋ชจ๋ฐ์ผํฐ, ์ ํ ๋ฐ์ค, ์ฐจ๋์ฉ ํ ๋ ๋งคํฑ์ค ์์คํ ๊ฐ๋ฐ
- Java ME(Java Micro Edition) : ํผ์ณํฐ, PDAํฐ, ์
ํฑ๋ฐ์ค, ํ๋ฆฐํฐ์ ๊ฐ์ ์์ ์๋ฒ ๋๋ ๊ธฐ๊ธฐ๋ค ๊ฐ์ ์์ ๊ธฐ๊ธฐ๋ฅผ ๋ค๋ฃจ๋๋ฐ ์ด์ฉํ๋ ์๋์
- JAVA SE๋ฅผ ์ค์ฌ ๋ผ์ดํธํ๊ฒ ๋ง๋ ๊ฒ์ด ๋ฏ๋ก SE๊ฐ๋ฐ์ ํ ์ค ์๋ฉด ME๊ธฐ๋ฐ์ ๊ฐ๋ฐ๋ ๊ฐ๋ฅ
- ๊ฐ๊ฐ์ OS(ex. Android OS, IOS, Black Berry ๋ฑ)๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ค๋งํธ ํฐ์ด ๋์คํ๋ ์ง๊ธ์ ์ ์ฐ์ด์ง ์๋๋ค
- JavaFX : ๊ฐ๋ณ๊ณ ์์ ๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(GUI)๋ฅผ ์ ๊ณตํ๋ ์๋์
- ๊ณ ์ฑ๋ฅ์ ํ๋์จ์ด ๊ทธ๋ํฝ ๊ฐ์๊ณผ ๋ฏธ๋์ด ์์ง API๋ฅผ ์ ๊ณตํด์ฃผ์ด์ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ์ ๊ฒฝ์ ์จ์ผ ํ๋ ๋ถ์ผ์์ ์ฌ์ฉ
์ ๋ฆฌํ์๋ฉด, ์ฌ๋๋ค์ด JAVA๋ผ๊ณ ํ๊ณ JAVA 11์ด๋ผ ํ๋๊ฒ์ ๊ฒฐ๊ตญ JDK์ ๋ฒ์ ์ ์๋ฏธํ๋ค๊ณ ๋ณผ ์ ์๋ค.
๊ทธ๋์ Java๋ฅผ ์ค์นํ๋ค ๋ผ๋ ๊ฒ์ JDK๋ฅผ ์ค์นํ๋ค ๋ผ๊ณ ํ ์ ์๋ค.
Java ์์ธ ๋ฒ์ ํ๊ธฐ๋ฒ

- ์ฃผ ๋ฒ์ : ์๋ฐ ์ธ์ด์ ๋ง์ ๋ณํ๊ฐ ์์ ๊ฒฝ์ฐ ์ฆ๊ฐ
- ๊ฐ์ ๋ฒ์ : ์ฃผ ๋ฒ์ ์์ ์ผ๋ถ ์ฌํญ์ด ๊ฐ์ ๋ ๋ ์ฆ๊ฐ.
- ์ ๋ฐ์ดํธ ๋ฒ์ : 1~3๊ฐ์ ์ฃผ๊ธฐ๋ก ๋ฒ๊ทธ๊ฐ ์์ ๋ ๋๋ง๋ค ์ฆ๊ฐ.
- LTS : ์ฅ๊ธฐ ์ง์ ์๋น์ค(Long Term Support)๋ฅผ ๋ฐ์ ์ ์๋ ๋ฒ์
JDK ์ข ๋ฅ
์๋ฐ๋ ์๋์ ์ ๋ช ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ JDK๋ ์ฌ๋ฌ๊ฐ์ง ์ข ๋ฅ๋ก ๋๋๋ค. (๋ฆฌ๋ ์ค ์ฒ๋ผ Ubuntu, CentOS, RedHat ๊ณ์ด์ด ์๋ ๊ฒ๊ณผ ๊ฐ๋ค)
์ด์ฒ๋ผ ์ฌ๋ฌ๊ฐ์ง JDK๊ฐ ์๋ ํฐ ์ด์ ๋ ๋ผ์ด์ผ์ค ๋๋ฌธ์ด๋ค.
Java ์์ค์ฝ๋ ์์ฒด๋ ์คํ์์ค์ด๋ค.
๊ทธ๋์ ์คํ์์ค์ธ Java ์์ค์ฝ๋๋ฅผ ๋น๋ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์๋ ๊ฑฐ์ ์ ์ฝ์ด ์์ง๋ง Oracle์์ ์ ๊ณตํ๋ ์ค์น๋ฒ์ ์ JDK์๋ ์์ NFTC ๋ผ์ด์ผ์ค๊ฐ ์ ์ฉ๋์ด ํ์ฌ์์๋ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. (๋ฐ๋ก ๋๋ด๊ณ ์ฌ์ฉํด์ผ ๋๋ค)
๊ทธ๋์ ๋ฌด๋ฃ ๋ผ์ด์ผ์ค๋ฅผ ์ ๊ณตํ๋ ๋๋ค๋ฅธ JDK ๋ฒ์ ์ ์ฌ๋ฌ ํ์ฌ์์ ์ถ์ํ๊ณ ์ง๊ธ์ JDK ํ๊ฒฝ์ด ๊ฐ์ถฐ์ง ๊ฒ์ด๋ค.

์์ ๊ฐ์ด ์ ๋ง ๋ง์ JDK๊ฐ ์์ง๋ง, ์ฃผ์ JDK ์ข ๋ฅ๋ก๋ ๋ค์๊ณผ ๊ฐ๋ค.
- Oracle JDK : Oracle์์ ์ ๊ณตํ๋ JDK. ๊ตฌ๋ ์ ํตํด ์ ๋ฃ ๋ผ์ด์ผ์ค๋ฅผ ๊ตฌ๋งคํ ์ ์๋ค.
- Open JDK : ์ ๋ช ํ ๋ฌด๋ฃ JDK. ํ์ง๋ง OpenJDK๋ฅผ ์ง์ ์ฌ์ฉํ๋๊ฒ ๋ณด๋ค๋, OpenJDK ๊ธฐ๋ฐ์ผ๋ก ๋น๋๋ JDK ์ฌ์ฉ์ ์ถ์ฒํ๋ค.
- Azul Zulu : ์ธ์ง๋๊ฐ ๋์ JDK ์ค ํ๋์ด๋ฉฐ, Mac ๋ฑ์์ ์ฌ์ฉํ ์ ์๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ํน์ง์ด๋ค.
- Amazon Corretto : AWS์์ ์ ๊ณตํ๋ JDK. AWS์์ ์ฝ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, AWS ํ๊ฒฝ์ด ์๋๋๋ผ๋ ์ฌ์ฉํ ์ ์๋ค.
- Temurin (AdoptOpenJDK) : Eclipse์์ ์ ๊ณตํ๋ JDK. Eclipse๋ฅผ ์ฌ์ฉํ๋ค๋ฉด Temurin ์ค์น๋ฅผ ์ถ์ฒํ๋ค.
[ JDK ์ ํ ๋ฐฉ๋ฒ TIP ]
1. ๋ผ์ด์ผ์ค ํ์ธ
์ฌ์ฉ ๋ชฉ์ ์ ๋ฐ๋ผ์ ๋ผ์ด์ผ์ค ํ์ธ์ด ๊ฐ์ฅ ์ค์ํ๋ค.
Oracle JDK๋ฅผ ์ ์ธํ๊ณ , ์์ ์๊ฐ๋ JDK๋ ๋ชจ๋ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์๋ค.
2. ์ ๋ฐ์ดํธ ์ง์
๋ณด์ ํจ์น ๋ฑ์ ํฌํจํ์ฌ ์ ๋ฐ์ดํธ ์ง์์ ์๋ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋๋ฐ ์์ด ๋งค์ฐ ์ค์ํ๋ค.
์๋ฐ ๋ฒ์ ์์ LTS ๋ผ๊ณ ์จ์๋ ๊ฒ์ด ๋ฐ๋ก ๋ณด์ ํจ์น๋ฅผ ์ฅ๊ธฐ์ ์ผ๋ก ์ง์ํ๋ค๋ ์๋ฏธ์ด๋ค.
JDK ๋๋ ํ ๋ฆฌ ๊ตฌ์ฑ์์

- bin : ์๋ฐ ๊ฐ๋ฐ, ์คํ์ ํ์ํ ๋๊ตฌ์ ์ ํธ๋ฆฌํฐ ๋ช ๋ น
- include : ๋ค์ดํฐ๋ธ ์ฝ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ์ํ๋ C์ธ์ด ํค๋ ํ์ผ
- lib : ์คํ ์๊ฐ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด๋์ค๋ค
bin ๋๋ ํฐ๋ฆฌ์ ๋ค์ด ์๋ ๊ฐ๋ฐ ํ๋ก๊ทธ๋จ

- javac : ์๋ฐ ์ปดํ์ผ๋ฌ๋ก ์๋ฐ ์์ค๋ฅผ ๋ฐ์ดํธ ์ฝ๋๋ก ์ปดํ์ผ
- java : ์๋ฐ ์ธํฐํ๋ฆฌํฐ. ์ปดํ์ผ๋ฌ๊ฐ ์์ฑํ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ํด์ํ๊ณ ์คํ
- javadoc : ์๋ฐ ์์ค๋ก๋ถํฐ HTML ํ์์ API ๋ํ๋จผํธ ์์ฑ
- jar : ์๋ฐ ํด๋์ค ํ์ผ์ ์์ถํ ์๋ฐ ์์นด์ด๋ธ ํ์ผ(.jar) ์์ฑ, ๊ด๋ฆฌํ๋ ์์ถ ํ๋ก๊ทธ๋จ (zip ๊ฐ์๊ฑฐ๋ผ ์๊ฐํ๋ฉด ๋๋ค)
- jmod : ์๋ฐ์ ๋ชจ๋ ํ์ผ(.jmd)์ ๋ง๋ค๊ฑฐ๋ ๋ชจ๋ ํ์ผ์ ๋ด์ฉ ์ถ๋ ฅ
- jlink : ์์ฉํ๋ก๊ทธ๋จ์ ๋ง์ถ ๋ง์ถคํ JRE ์์ฑ
- jdb : ์๋ฐ ์์ฉํ๋ก๊ทธ๋จ์ ์คํ ์ค ์ค๋ฅ๋ฅผ ์ฐพ๋ ๋ฐ ์ฌ์ฉํ๋ ๋๋ฒ๊ฑฐ
- javap : ์ญ์ด์ ๋ธ๋ฌ. ์ปดํ์ผ๋ ํด๋์ค ํ์ผ์ ์๋์ ์์ค๋ก ๋ณํ
JRE (Java Runtime Environment)
JRE๋ ์๋ฐ ์คํํ๊ฒฝ(Java Runtime Environment)์ ์ฝ์๋ก์, JVM๊ณผ ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํ(๋์)์ํฌ ๋ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ API๋ฅผ ํจ๊ป ๋ฌถ์ด์ ๋ฐฐํฌ๋๋ ํจํค์ง ์ด๋ค. ์ด์ธ์๋ ์๋ฐ ๋ฐํ์ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ํ๋กํผํฐ ์ธํ ์ด๋ ๋ฆฌ์์ค ํ์ผ(jar ํ์ผ)์ ๊ฐ์ง๊ณ ์๋ค.
JRE๋ ๊ธฐ๋ณธ์ ์ผ๋ก JDK์ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ JDK๋ฅผ ์ค์นํ๋ฉด ํจ๊ป ์ค์น๋๋ค.
๊ธฐ์กด์๋ ๊ฐ๋ณ์ ์ผ๋ก ์ค์น๊ฐ ๊ฐ๋ฅํ์ง๋ง JDK11 ๋ฒ์ ๋ถํฐ๋ ๋ฐ๋ก ์ ๊ณต๋์ง ์๋๋ค๊ณ ํ๋ค.
๊ฐ๋จํ ์ ๋ฆฌํ์๋ฉด, Java๋ก ํ๋ก๊ทธ๋จ์ ์ง์ ๊ฐ๋ฐํ๋ ค๋ฉด JDK๊ฐ ํ์ํ๊ณ , ์ปดํ์ผ ๋ Java ํ๋ก๊ทธ๋จ์ ์คํ์ํค๋ ค๋ฉด JRE๊ฐ ํ์ํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.

JVM (Java Virtual Machine)
JVM์ ์๋ฐ ๊ฐ์๋จธ์ (Java Virtual Machine)์ ์ฝ์๋ก์, ์ง์ญํ๋ฉด ์๋ฐ๋ฅผ ์คํํ๋ ๋จธ์ ์ด๋ผ๋ ๊ฑด๋ฐ, ๊ทธ๋ฅ ์๋ฐ๋ฅผ ๋๋ฆฌ๋ ํ๋ก๊ทธ๋จ ์ ๋๋ก ์ดํดํ๋ฉด ๋๋ค.
์๋ฐ๋ก ์์ฑ๋ ๋ชจ๋ ํ๋ก๊ทธ๋จ์ JVM(์๋ฐ ๊ฐ์ ๋จธ์ )์์๋ง ์คํ๋ ์ ์์ผ๋ฏ๋ก, ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํด์๋ ๋ฐ๋์ ์๋ฐ ๊ฐ์ ๋จธ์ ์ด ์ค์น๋์ด ์์ด์ผ ํ๋ค.
์์ ๋งํ๋ฏ์ด JVM์ ์๋ฐ ์คํ ํ๊ฒฝ JRE(Java Runtime Environment)์ ํฌํจ๋์ด ์๋ค. ๊ทธ๋์ ํ์ฌ ์ฌ์ฉํ๋ ์ปดํจํฐ์ ์ด์์ฒด์ ์ ๋ง๋ ์๋ฐ ์คํํ๊ฒฝ (JRE)๊ฐ ์ค์น๋์ด ์๋ค๋ฉด ์๋ฐ ๊ฐ์ ๋จธ์ ์ด ์ค์น๋์ด ์๋ค๋ ๋ป์ด๊ธฐ๋ ํ๋ค.

JAVA๋ผ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ธ๊ธฐ ์๋ ํต์ฌ ์ด์ ์ค ํ๋๊ฐ ๋ฐ๋ก ์ด JVM ๊ฐ๋ ์ธ๋ฐ,
JVM์ ์ฌ์ฉํจ์ผ๋ก์จ ์ป๋ ๊ฐ์ฅ ํฐ ์ด์ ์ JVM์ ์ฌ์ฉํ๋ฉด ์๋ฐ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ํ๋ซํผ์์ ์ ์ฝ ์์ด ๋์ํ๋๋ก ํ ์ ์๋ค๋ ์ ์ด๋ค.
์ด์ ๋ถํฐ ์ด์ ๋ํด ์์ธํ ์์๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด์.
์ JVM์ด ํ์ํ๊ฐ?
Java ๋ OS์ ์ข ์์ ์ด์ง ์๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
OS์ ์ข ์๋ฐ์ง ์๊ณ ์คํ๋๊ธฐ ์ํด์ OS ์์์ Java ๋ฅผ ์คํ์ํฌ ๋ฌด์ธ๊ฐ๊ฐ ํ์ํ๋ฐ ๊ทธ๊ฒ ๋ฐ๋ก JVM(Java๋ฅผ ์คํํ ์ ์๊ฒ ํ๋ ๊ฐ์ ์ปดํจํฐ)์ด๋ค.
OS์ ์ข ์๋ฐ์ง ์๋๊ฒ์ด ๋ฌด์จ ์๋ฏธ์ธ์ง ๊ธฐ์กด C์ธ์ด์ธ์ ๋น๊ต๋ฅผ ํตํด ์์๋ณด์.
C์ธ์ด์ ์คํ (WOCA)
ํ๋ถ์์ c์ธ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ ์ฅํ๊ณ ์คํํ๋ฉด exe ํ์ผ๋ก ๋จ์ด์ ธ, ๊ทธ exe ํ์ผ์ ์คํํ๋ฉด c์ธ์ด ์ฝ๋๊ฐ ์คํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๋ ๊ฒฝํ์ ํ๋ฒ์ฏค์ ํด๋ณด์์ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๊ฐ๋ฐ์๊ฐ ์์ค ์ฝ๋๋ฅผ ์์ฑํ๋ฉด, ๊ธฐ๊ณ์ ๋ง์ถฐ์ง ์ปดํ์ผ๋ฌ๊ฐ ๊ฐ ๊ธฐ๊ณ๊ฐ ์ดํดํ๋ ๊ธฐ๊ณ์ด๋ก ๋ณํํด์ฃผ์ด ์คํ ํ๋ก๊ทธ๋จ(exe)๋ฅผ ๋ง๋ค์ด ์ฃผ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์ปดํ์ผ๋ ์ฝ๋๋ฅผ Binary code(๊ธฐ๊ณ๊ฐ ์ฝ์ ์ ์๋ ์ด์ง ์ฝ๋, ๊ธฐ๊ณ์ด)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ด๋ฅผ WOCA์ ํน์ฑ์ด๋ผ ๋ถ๋ฅด๋ฉฐ, "Write Once, Compile Anywhere" 'ํ๋ฒ๋ง ์์ฑํ๊ณ ์ปดํ์ผํ๋ฉด ์ด๋์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค' ๋ฅผ ์๋ฏธํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด ๊ธฐ๊ณ์ด๋ ํน์ OS๋ CPU ๊ตฌ์กฐ์ ๋ง์ถฐ์ง ์ปดํ์ผ๋ฌ์ ์ํด ๋ค๋ฅด๊ฒ ์ปดํ์ผ์ด ๋๋ค๋ ํน์ง์ด ์๋ค.
์ด ๋ง์ ๋ค์ํ ํ๊ฒฝ์ ๊ธฐ๊ธฐ(๋ค๋ฅธ OS, CPU ๊ตฌ์กฐ)๋ฅผ ์ฌ์ฉํ๋ ํ๊ฒฝ์์๋ ์ด ๊ธฐ๊ณ์ด๋ฅผ ์ดํดํ ์ ์๋ค๋ ๋ง์ด๋ค.
์ปดํ์ผ๋ฌ๋ ๊ฐ์ ํ์์ ๊ธฐ๊ณ์ด๋ฅผ ๋ง๋ค์ด๋ด์ง๋ง, ๊ฐ OS ํ๊ฒฝ์ ๋ง์ถฐ์ง ๋ ์์ ์ธ ์ปดํ์ผ๋ฌ์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํ๊ฒฝ์์๋ ์ดํดํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค.

๊ทธ๋์ ํ๋ถ์์ ๋ฆฌ๋ ์ค ๊ณผ์ ์ ๋ค์๋ C์ธ์ด๋ฅผ ์ฝ๋ฉํ๋ฉด์ ๋ฌด์ธ๊ฐ ๋ค๋ฅธ ๋ฌธ๋ฒ์ ์ต์์น ์์ ๊ฒฝํ์ ๊ฐ์ง๊ณ ์์ ํ ๋ฐ ์ด๊ฒ์ด ๊ทธ ์ด์ ์ด๊ธฐ๋ ํ๋ค.
๊ทธ๋์ ์ด๋ฅผ "์ด์์ฑ์ด ๋ฎ๋ค" ๊ณ ํํํ๊ธฐ๋ ํ๋ค.
๋ณดํต C์ธ์ด๋ฅผ OS์ ์ข ์๋ ์ธ์ด๋ผ๊ณ ๋ ํํํ๋๋ฐ, ์๋์ฐ OS ํ๊ฒฝ์์ ์ปดํ์ผ๋ ์ฝ๋๊ฐ ๋ฆฌ๋ ์ค OSํ๊ฒฝ์์๋ ์ฝ์ด์ง ์ ์๊ธฐ์, ๊ฐ๋ฐ์๋ ์๋์ฐ์ฉ C ํ๋ก๊ทธ๋จ, ๋ฆฌ๋ ์ค์ฉ C ํ๋ก๊ทธ๋จ์ ๋ ๋ง๋ค์ด์ผ ๋์ OS ํ๊ฒฝ์ ์ข ์ ๋์๋ค๊ณ ๋งํ๋ค.
JAVA์ ์คํ (WORA)
์ด๋ ๊ฒ ์ปดํ์ผ๋ฌ๊ฐ ์ด์์ฒด์ ๋ง๋ค ์์กด์ ์ด์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ JAVA(JVM)๊ฐ ๋ฑ์ฅํ๊ฒ ๋๋ค.
JAVA ์ธ์ด๋ก ์์ฑํ ์์คํ์ผ์ ์ง์ ์ด์์ฒด์ ๋ก ๊ฐ์ ์คํํ๋ ๊ฒ์ด ์๋, JVM์ ๊ฑฐ์ณ์ ์ด์์ฒด์ ์ ์ํธ์์ฉ์ ํ๊ฒ ๋๋ค.
์ด๋ง์ JVM๋ง ์์ผ๋ฉด ์ด์์ฒด์ ๊ฐ ๋ฆฌ๋ ์ค๋ , ๋งฅ์ด๋ ๊ด๊ณ์์ด ์ด์์ฒด์ ๋ก๋ถํฐ ๋ ๋ฆฝ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ ์ฝ์์ด ์คํํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค.
์ด๊ฒ์ด ๊ฐ๋ฅํ ์ด์ ๋ ์ปดํ์ผ๋ ์ฝ๋์ ํ๋์จ์ด/OS ์ฌ์ด ์ค๊ฐ์์, ํด๋น ํ๋์จ์ด/OS ํ๊ฒฝ์ ์๋ง๊ฒ JVM์ด Byte Code๋ก ๋ณํํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์ ๊น์ง๋ ๋ค์ํ OS ํ๊ฒฝ์ ๋ง์ถฐ์ง ์ปดํ์ผ๋ฌ๊ฐ ์ดํดํ ์ ์๋๋ก ์ง์ ์ฝ๋ ๋ณ๊ฒฝ์ด ํ์ํ์ง๋ง ์๋ฐ๋ ๊ทธ๋ด ํ์๊ฐ ์์ด์ก๋ค.

์์ ๊ทธ๋ฆผ์ฒ๋ผ ์๋ก ๋ค๋ฅธ ์ด์์ฒด์ ๋ผ๋ ์๋ฐ ๊ฐ์ ๋จธ์ ๋ง ์ค์น๋์ด ์๋ค๋ฉด, ๊ฐ์ ์๋ฐ ํ๋ก๊ทธ๋จ์ด ์๋ฌด๋ฐ ์ถ๊ฐ ์กฐ์น ์์ด ๋์ํ ์ ์๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ ํ ๋ฒ๋ง ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ฉด, ๋ชจ๋ ์ด์์ฒด์ ์์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ ์ฅ์ ์ด ์๋ค.
์์์ C์ธ์ด์์์ ์ปดํ์ผ ๊ณผ์ ์ ์์ค ์ฝ๋๋ฅผ Binary Code(๊ธฐ๊ณ์ด)๋ก ๋ฐ๋ก ๋ณํํ์ฌ ํ๋์จ์ด์ ์ํด ์ฝ์ด์ง๊ณ , ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ OS ํ๊ฒฝ์ ๋ฐ๋ผ ์ฝ๋๊ฐ ๋ฌ๋ผ์ ธ์ผํ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ, Java๋ ์๋์ ๊ณผ์ ์ ๊ฑฐ์น๋ ๊ฒ์ ํตํด ์ฝ๋์ ์์ ์ด ๋ถํ์ํ๊ฒ ๋๋ค.
- Java Compiler๊ฐ JAVA๋ก ์์ฑ๋ ์์ค ์ฝ๋ .java ํ์ผ์ .class ํ์ผ์ธ Byte Code๋ก ์ปดํ์ผํ๋ค.
(๋จ, ํด๋น ์ฝ๋๋ ์ง์ CPU์์ ๋์ํ ์ ์๋ ์ฝ๋๊ฐ ์๋๋ค. ์ ํํ ๋งํ๋ฉด ๊ฐ์๋จธ์ JVM์ด ์ดํดํ ์ ์๋ ์ฝ๋์ด๋ค) - ์ด์ ์ด Byte Code๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํ์ํค๊ธฐ ์ํด ๊ฐ์ CPU๊ฐ ํ์ํ๋ฐ, ์ด๊ฒ์ด JVM(Java Virtual Machine)์ ์ญํ ์ด๋ค.
- JVM์ด Byte Code๋ฅผ ๊ธฐ๊ณ์ด(Binary Code)๋ก ๋ณํํ๋ค.
- ์ด๋ ๊ฒ JVM์ ์ํด ์ปดํ์ผ๋ ๊ธฐ๊ณ์ด๋ ๋ฐ๋ก CPU์์ ์คํ๋์ด ์ฌ์ฉ์์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํด์ค๋ค.
[ ๋ฐ์ด๋๋ฆฌ ์ฝ๋ ]
์ปดํจํฐ๊ฐ ์ธ์ํ๊ณ ์ดํดํ ์ ์๋ 0๊ณผ 1๋ก ๊ตฌ์ฑ๋ ์ฝ๋์ด์ง๋ง, ํ๊ฒฝ์ ์ข ์์ ์ด๋ฉฐ ์คํํ์ง ๋ชปํ๋ค.
'๋ง์ปค'์ ์ํด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ ๋ฐ์ํ๊ณ CPU๊ฐ ์ง์ ํด๋ ํ๊ณ ์คํํ ์ ์๋๋ก ์์ ๋์ด์ผ ๊ธฐ๊ณ์ด๊ฐ ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๊ธฐ๊ณ์ด์ ์ ์ฌํ ๋ ๋ฒจ์ ์ฝ๋์ง๋ง ๋ฐ์ง์๋ฉด ์์ ํ ๊ธฐ๊ณ์ด๋ ์๋๋ค.
[ ๋ฐ์ดํธ ์ฝ๋ ]
๊ฐ์๋จธ์ (JVM, CLR ๋ฑ)์์ ์ฌ์ฉ๋๋ ์ฝ๋ ๊ฐ๋ ์ผ๋ก, ๊ฐ์๋จธ์ ์ด ์ดํดํ ์ ์๋ ์ค๊ฐ ๋ ๋ฒจ๋ก ์ปดํ์ผ ํ ๊ฒ์ ๋งํ๋ค.
๋ฐ์ง์๋ฉด ๋ฐ์ชฝ์ง๋ฆฌ ์ปดํ์ผ ๊ฒฐ๊ณผ๋ฌผ ์ด๊ธฐ๋ ํ๋ค.
์ด๋ ์ด์ ๋ธ๋ฆฌ์ด์ ์ ์ฌํ ํํ๋ฅผ ๋๊ณ ์์ผ๋ฉฐ, ์คํ๋๊ธฐ ์ํด์๋ ์ปดํ์ผ๋ฌ(javac, csc.exe ๋ฑ) ์ ์ํด ํ๋ฒ ๋ ๋ณํ๋์ด์ผ ํ๋ค.
๋ฐ์ด๋๋ฆฌ ์ฝ๋์ ๋ฌ๋ฆฌ ์ด๋ ํ ํ๊ฒฝ์ ์ข ์์ ์ด์ง ์๊ณ ์คํ๋ ์ ์๋ค.
์ด์ฒ๋ผ JAVA๋ WORA์ ํน์ฑ์ด๋ผ๊ณ ๋ถ๋ฆฌ์ฐ๋ฉฐ, "Write Once, Read Anywhere"์ด๋ผ๋ ์ฌ์ปดํ์ผํ ํ์๊ธฐ ์๊ณ ๋ฐ๋ก ๊ธฐ๊ณ๊ฐ ์ฝ๊ณ ์คํํ ์ ์๊ฒ ํ๋ค๋ ์๋ฏธ๋ก ์ฐ์ฌ์ง๋ค.
์ฆ, ์๋์ฐ ํ๊ฒฝ์์ ์ปดํ์ผํ Byte Code๋ฅผ ๋งฅ, ๋ฆฌ๋ ์ค ํ๊ฒฝ์์๋ ์ ์ฝ์์ด ๋์ํ๋ค๋ ๊ฒ์, JVM์ด ์๋ฐ ํ์ผ์ ํ๋ฒ ๋ ๊ธฐ๊ณ์ด๋ก ๋ณํํด์ฃผ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
์ด๋ก ์ธํด JAVA์ธ์ด๋ ์ด์์ฑ์ด ๋์ ํน์ฑ์ ๊ฐ๊ฒ ๋์๋ค.
๋จ, ๊ฐ๊ณผํ์ง ๋ง์์ผ ํ ์ ์ ์๋ฐ ํ๋ก๊ทธ๋จ๊ณผ๋ ๋ฌ๋ฆฌ ์๋ฐ ๊ฐ์ ๋จธ์ (JVM)์ ์ด์์ฒด์ ์ ์ข ์์ ์ด๋ฏ๋ก, ๊ฐ ์ด์์ฒด์ ์ ๋ง๋ ์๋ฐ ๊ฐ์ ๋จธ์ ์ ์ค์นํด์ผ ํ๋ค๋ ์ ์ด๋ค.
์ด์ฉ๋ฉด ์ฌ์ฉ์ ์ ์ฅ์์ C๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ด๋ , JAVA๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ด๋ ๋๊ฐ์ด ์ด์์ฒด์ ์์ ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ํ๊ธฐ ์ํด์ ๋จธ์ ์ ์ค์นํด์ผ ํ๋ค๋ ์ ์์ ๋ณ ์ฐจ์ด๊ฐ ์๊ฒ ๋๊ปด์ง์๋ ์๋ค.
ํ์ง๋ง ๊ฐ๋ฐ์ ์ ์ฅ์์ ์๋์ฐ์ฉ C ์ฝ๋์ ๋ฆฌ๋ ์ค์ฉ C ์ฝ๋๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ๊ธฐ ๋ง๋ค์ด์ผ ํ๊ณ ๋ ์ด๋ค์ ๊ฐ๊ธฐ ์ ์ง๋ณด์ํด์ผ ๋๋ ๋ถํธํจ์, JAVA๋ ํ๋ฒ๋ง ์์ฑ๋๋ฉด ๊ฐ OS์ ๋ง๋ JVM๋ง ์ ์ค์นํด์ฃผ๋ฉด ๊ตฌ๋๋๊ธฐ์ ํจ์จ์ฑ๊ณผ ์์ฐ์ฑ์ด ๋์์ง๋ค๋ ํฐ ์ฅ์ ์ ๊ฐ์ง๊ฒ ๋๋ค.
์ด๋ฌํ ์ฅ์ ๋๋ฌธ์ ์๋ฐ๊ฐ ์๋ ๋ค๋ฅธ ์ธ์ด๋ ํด๋์ค ํ์ผ๋ง ์๋ค๋ฉด JVM์ ์ฌ์ฉํ ์ ์๊ฒ ๊ฐ๋ฐ๋๊ณ ์๋ค.
์ค์ ๋ก Java ์ธ ๋ค๋ฅธ ์ธ์ด(ํด๋ก์ , ๊ทธ๋ฃจ๋น, ์ฝํ๋ฆฐ ๋ฑ)์์๋ ์ด JVM ์ฌ์ฉํ๊ณ ์๋ค.
๊ทธ๋ฌ๋ ์ฅ์ ์ด ์์ผ๋ฉด ์ธ์ ๋ ๋จ์ ์ด ์๊ธฐ ๋ง๋ จ์ด๋ค.
์ด์ฒ๋ผ ์๋ฐ ํ๋ก๊ทธ๋จ์ ์ผ๋ฐ ํ๋ก๊ทธ๋จ๋ณด๋ค ์๋ฐ ๊ฐ์ ๋จธ์ ์ด๋ผ๋ ํ ๋จ๊ณ๋ฅผ ๋ ๊ฑฐ์ณ์ผ ํ๋ฏ๋ก, ๊ฒฐ๊ตญ์ ์๋์ ์ผ๋ก ์คํ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ ๊ฐ์ง๊ณ ๋ดํฌํ๊ณ ์๋ค.
์ฆ, JAVA๋ C์ธ์ด์ ๋ฌ๋ฆฌ ๋๋ฒ์ ์ปดํ์ผ๋ก ์ธํ ์๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ฐ, ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด JIT ์ปดํ์ผ๋ฌ ๋ผ๋๋ด๋ถ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํด์ ํ์ํ ๋ถ๋ถ๋ง์ ๊ธฐ๊ณ์ด๋ก ๋ฐ๊พธ์ด ์ค์ผ๋ก์จ ์ฑ๋ฅ ํฅ์์ ๊ฐ์ ธ์ค๋๋ก ํ์ง๋ง ๊ทธ๋ผ์๋ C์ธ์ด์ ์คํ ์๋๋ฅผ ๋ฐ๋ผ์ก์ง๋ ๋ชปํ๋ค. (์ ๊ฒ์์ด๋ ์๋ฒ ๋๋์์ C๊ณ์ด ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ๋ฐ๋ก ์ด ๋๋ฌธ์ด๊ธฐ๋ ํ๋ค)
[ JIT ์ปดํ์ผ๋ฌ(Just-In-Time compiler) ๋? ]๊ธฐ์กด์ ์๋ฐ๋ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ๋ช ๋ น์ด๋ฅผ ํ๋์ฉ ์คํํ๊ฒ๋ ์ด๋ฃจ์ด์ ธ ์์ด ์คํ ์๋๊ฐ ๋๋ ธ๋ค.
ํ์ง๋ง ํ๋์จ์ด๊ฐ ๋ฐ์ ํ๋ฉด์ ์๋ฐ ์ปดํ์ผ๋ฌ๋ JIT ์ปดํ์ผ๋ฌ ๋ฐฉ์์ผ๋ก ๊ฐ์ ๋์ด ์๋์ ์ธ ์ธก๋ฉด์์ ์๋นํ ๊ฐ์ ์ ์ด๋ฃจ์๋ค.
JIT ์ปดํ์ผ๋ฌ๋ ๊ฐ์ ์ฝ๋๋ฅผ ๋งค๋ฒ ํด์ํ์ง ์๊ณ , ์คํํ ๋ ์ปดํ์ผ์ ํ๋ฉด์ ํด๋น ์ฝ๋๋ฅผ ์บ์ฑ ํ๋ค. ์ดํ์๋ ๋ฐ๋ ๋ถ๋ถ๋ง ์ปดํ์ผํ๊ณ ๋๋จธ์ง๋ ์บ์ฑ๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ค.
๋์ ๋ฒ์ญ(dynamic translation)์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ ์ด ๊ธฐ๋ฒ์ ์ด์ ์ ์๋ฐ ํด์๊ธฐ(Java interpreter) ๋ฐฉ์๋ณด๋ค ์ฑ๋ฅ์ด 10๋ฐฐ ~ 20๋ฐฐ ์ ๋ ๋ ์ข๋ค.
์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํ ๊ณผ์
๋ฐฑ๋ ๊ธ๋ก๋ง ์ฝ์ด๋ดค์ ํ๋ฒ ์คํํ๋ ๊ฒ๋ณด๋ค ๋ชปํ๋ค๋ผ๋ ๋ง์ด ์๋ค.
์์์ ๋ฐฐ์ด JVM์ด ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ ๊ณผ์ ์ ์ง์ ํด๋ณด์.
์์ ๋งํ๋ฏ์ด JVM์ด๋ผ๋ ํน์ฑ ๋๋ฌธ์ ์๋ฐ๋ก ์์ฑํ ํ์ผ์ ์คํํ๊ธฐ ์ํด์๋ ๋ ๋ฒ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ผ๋ง ํ๋ค.
ํ๋๋ MyProgram.java ํ์ผ์ MyProgram.class ํ์ผ๋ก ๋ฐ๊พธ์ด ์ฃผ๋ ์ปดํ์ผ ๋จ๊ณ์ด๊ณ ๋๋ฒ์งธ๋ MyProgram.class ํ์ผ์ ๋ฐ์ด๋๋ฆฌ ์ฝ๋(0100101...)๋ก ๋ณํํ๊ณ ์คํํ๋ ๋จ๊ณ์ด๋ค.

์ ๊ทธ๋ฆผ์์ Compiler๋ javac.exe์ ํด๋น๋๊ณ JVM์ java.exe์ ํด๋น๋๋ค.
์ ๊ทธ๋ฆผ์ ์์๋๋ก ์์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ์์ค์ฝ๋(MyPrograme.java)๋ฅผ ์์ฑํ๋ค.
- ์ปดํ์ผ๋ฌ(Compiler)๋ ์๋ฐ ์์ค์ฝ๋๋ฅผ ์ด์ฉํ์ฌ ํด๋์ค ํ์ผ(MyProgram.class)์ ์์ฑํ๋ค. ์ปดํ์ผ ๋ ํด๋์ค ํ์ผ์ JVM(Java Virtual Machine)์ด ์ธ์ํ ์ ์๋ ๋ฐ์ดํธ ์ฝ๋ ํ์ผ์ด๋ค.
- JVM์ ํด๋์ค ํ์ผ์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ํด์ํ์ฌ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ก ๋ณํํ๊ณ ํ๋ก๊ทธ๋จ์ ์ํํ๋ค.
- MyProgram ์ํ ๊ฒฐ๊ณผ๊ฐ ์ปดํจํฐ์ ๋ฐ์๋๋ค.
์ ์๋ฐ๋ ์ปดํ์ผ์ ํ๊ณ ๋๋ฉด exe ํ์ผ์ด ์๋ class ํ์ผ์ด ์์ฑ๋ ๊น?
c ๋๋ c++ ๋ฑ์ผ๋ก ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ์ต์ข ๊ฒฐ๊ณผ๋ฌผ๋ก exe ํ์ผ์ ๋ง๋ค์ด ๋ธ๋ค.
์ด exe ํ์ผ์ ๊ณ์ฐ๊ธฐ์ ๊ฐ์ ํ๋ก๊ทธ๋จ์ด๊ฑฐ๋ ๊ฒ์์ผ ์๋ ์๋ค.
์ฌ์ฉ์๋ ๊ทธ๋ฅ ๋จ์ํ exe ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ๋ง ํ๋ฉด ํ๋ก๊ทธ๋จ์ ์คํ์์ผ ๋ณผ์ ์๋ค.
๊ทธ๋ฐ๋ฐ ์ ์๋ฐ๋ ์คํํ๊ธฐ๋ ์ด๋ ค์ด class๋ผ๋ ๊ฑธ ๋ง๋ค์ด์ ๊ท์ฐฎ๊ฒ ํ๋๊ฑธ๊น?
๋ฌผ๋ก java๋ exe ํ๋ก๊ทธ๋จ์ผ๋ก ๋ง๋ค์ด ๋ผ ์ ์๊ธฐ๋ ํ๋ค.
๋ค๋ง JVM์ด exe์ ํฌํจ๋๋ ํ์์ผ๋ก ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ exe ํ์ผ์ด ๋ฌด์ฒ์ด๋ ์ปค์ง๋ค๋ ๋จ์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ผ๋ถ๋ฌ ์์ฑํ์ง๋ ์๋๋ค.
์ด์ ์ค์ ๋ก ์ ๋ง๋ก ์ ๋ ๊ฒ ์ปดํ์ผ์ด ์งํ๋๋์ง ์ค์ตํด๋ณด์.
๋ค์๊ณผ ๊ฐ์ด ์๋ฐ ์ฝ๋ ํ์ผ์ ์์ฑํ๊ณ MyProgram.java ๋ผ๋ ์๋ฐ ํ์ฅ์ ํ์ผ๋ก ์ ์ฅํ๋ค.
public class MyProgram {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
์ด์ ์ด ์ฝ๋(ํ์ผ)๊ฐ ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํ๊ธฐ ์ํด ํ๋ก๊ทธ๋จ์ ์คํ์์ผ๋ณด์.
Windows๋ฅผ ๊ธฐ์ค์ผ๋ก, cmd ์ฐฝ์ ์ด๊ณ ํด๋น MyProgram.java ํ์ผ์ด ์๋ ๊ณณ์ผ๋ก ์ด๋ํ๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ์์น์์ javac ๋ช
๋ น์ด๋ก ์ปดํ์ผ์ ์งํํ๋ค.
> javac MyProgram.java

๊ทธ๋ฌ๋ฉด ํ์ฌ ์์น์ MyProgram.class ํ์ผ์ด ์์ฑ๋ ๊ฑธ ํ์ธํ ์ ์๋ค.
MyProgram.class ํ์ผ์ด ๋ง๋ค์ด์ก์ผ๋ฉด ์ด์ java ๋ช
๋ น์ด๋ก MyProgram.class ํ์ผ์ ์คํ ์์ผ ์ฝ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ป์์ ์๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด java ๋ช ๋ น์ด๊ฐ ๋ฐ๋ก JVM์ ์คํ์ํค๋ ๊ฒ์ด๋ค.
> java MyProgram # ํ์ผ์ ์คํ์ํฌ๋ .class ํ์ฅ์๋ ๋บ๋ค.
Hello World
"Hello World"๊ฐ ์ถ๋ ฅ๋๋ฉด์ ํ์ผ์ด ์คํ๋๊ฑธ ํ์ธํ ์ ์๋ค.
์ด ๊ธ์ด ์ข์ผ์ จ๋ค๋ฉด ๊ตฌ๋ & ์ข์์
์ฌ๋ฌ๋ถ์ ๊ตฌ๋
๊ณผ ์ข์์๋
์ ์์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค.