WORA = Write Once, Run Anywhere
ํ ๋ฒ ์ฐ๊ณ ๋ชจ๋ ๊ณณ์์ ์คํํ๋ค
Java Virtual Machine์ ์ค์๋ง.
JVM์ OS ์์์ CPU๊ฐ Java๋ฅผ ์ธ์, ์คํํ ์ ์๊ฒ ํ๋ ๊ฐ์ ์ปดํจํฐ์ด๋ค.
JVM์ 2๊ฐ์ง ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ด ์๋ค.
- ์๋ฐ ํ๋ก๊ทธ๋จ์ด ์ด๋ ๊ธฐ๊ธฐ, ์ด๋ ์ด์์ฒด์ ์์์๋ ์คํ๋ ์ ์๊ฒ ๋ง๋ค์ด ์ค๋ค. => WORA
- ์๋ฐ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ & ์ต์ ํํด ์ค๋ค.
Java๋ JVM์ ํตํด ํ๋ซํผ์ ๊ด๊ณ์์ด ์คํํ ์ ์๋ค.
Java ์์ค์ฝ๋, ์ฆ ์์์ฝ๋(.java)๋ CPU๊ฐ ์ธ์์ ํ์ง ๋ชปํ๋ฏ๋ก ๊ธฐ๊ณ์ด๋ก ์ปดํ์ผ์ ํด์ค์ผํ๋ค. ํ์ง๋ง Java๋ ์ด JVM ์ด๋ผ๋ ๊ฐ์๋จธ์ ์ ๊ฑฐ์ณ์ OS์ ๋๋ฌํ๊ธฐ ๋๋ฌธ์ OS๊ฐ ์ธ์ํ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ๋ฐ๋ก ์ปดํ์ผ ๋๋๊ฒ ์๋๋ผ JVM์ด ์ธ์ํ ์ ์๋ Java bytecode(.class)๋ก ๋ณํ๋๋ค.
Java compiler ๊ฐ .java ํ์ผ์ .class ๋ผ๋ Java bytecode๋ก ๋ณํํ๋ค.
๐ก ์ฌ๊ธฐ์ Java compiler๋ JDK๋ฅผ ์ค์นํ๋ฉด bin ์ ์กด์ฌํ๋ javac.exe๋ฅผ ๋งํ๋ค. (JDK์ Java compiler๊ฐ ํฌํจ๋์ด ์๋ค). javac ๋ช ๋ น์ด๋ฅผ ํตํด .java๋ฅผ .class๋ก ์ปดํ์ผ ํ ์ ์๋ค.
๋ณํ๋ bytecode๋ ๊ธฐ๊ณ์ด๊ฐ ์๋๊ธฐ ๋๋ฌธ์ OS์์ ๋ฐ๋ก ์คํ๋์ง ์๋๋ค.
์ด ๋, JVM์ด OS๊ฐ bytecode๋ฅผ ์ดํดํ ์ ์๋๋ก ํด์ํด์ค๋ค. ๋ฐ๋ผ์ Byte Code๋ JVM ์์์ OS ์๊ด์์ด ์คํ๋ ์ ์๋ ๊ฒ์ด๋ค.
OS์ ์ข
์์ ์ด์ง ์๊ณ , Java ํ์ผ ํ๋๋ง ๋ง๋ค๋ฉด ์ด๋ ๋๋ฐ์ด์ค๋ JVM ์์์ ์คํํ ์ ์๋ค.
๊ฐ์ ์ปดํจํฐ(VM)์์ ๋์๊ฐ๋ ์คํ ํ๋ก๊ทธ๋จ์ ์ํ ์ด์ง ํํ๋ฒ.
์๋ฐ ๋ฐ์ดํธ ์ฝ๋(Java bytecode)๋ JVM์ด ์ดํดํ ์ ์๋ ์ธ์ด๋ก ๋ณํ๋ ์๋ฐ ์์ค์ฝ๋๋ฅผ ์๋ฏธํ๋ค. ์๋ฐ ์ปดํ์ผ๋ฌ์ ์ํด ๋ณํ๋ ์ฝ๋์ ๋ช ๋ น์ด ํฌ๊ธฐ๊ฐ 1๋ฐ์ดํธ๋ผ์ ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ผ๊ณ ๋ถ๋ฆฌ๊ณ ์๋ค.
๋ฐ์ดํธ ์ฝ๋๋ ๋ค์ ์ค์๊ฐ ๋ฒ์ญ๊ธฐ ๋๋ JIT ์ปดํ์ผ๋ฌ์ ์ํด ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ก ๋ณํ๋๋ค.
๐ก ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋?
๋ฐ์ด๋๋ฆฌ ์ฝ๋ ๋๋ ์ด์ง ์ฝ๋๋ผ๊ณ ํ๋ค. ์ปดํจํฐ๊ฐ ์ธ์ํ ์ ์๋ 0๊ณผ 1๋ก ๊ตฌ์ฑ๋ ์ด์ง์ฝ๋
๐ก ๊ธฐ๊ณ์ด๋?
0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ด๋๋ฆฌ ์ฝ๋์ด๋ค. ๊ธฐ๊ณ์ด๊ฐ ์ด์ง์ฝ๋๋ก ์ด๋ฃจ์ด์ก์ ๋ฟ ๋ชจ๋ ์ด์ง์ฝ๋๊ฐ ๊ธฐ๊ณ์ด์ธ ๊ฒ์ ์๋๋ค. ๊ธฐ๊ณ์ด๋ ํน์ ํ ์ธ์ด๊ฐ ์๋๋ผ CPU๊ฐ ์ดํดํ๋ ๋ช ๋ น์ด ์งํฉ์ด๋ฉฐ, CPU ์ ์กฐ์ฌ๋ง๋ค ๊ธฐ๊ณ์ด๊ฐ ๋ค๋ฅผ ์ ์๋ค.
์ฆ, CPU๊ฐ ์ดํดํ๋ ์ธ์ด๋ ๋ฐ์ด๋๋ฆฌ ์ฝ๋, ๊ฐ์ ๋จธ์ ์ด ์ดํดํ๋ ์ฝ๋๋ ๋ฐ์ดํธ ์ฝ๋์ด๋ค.
JVM์ ํฌ๊ฒ ์๋์ ๊ฐ์ด ์ด๋ฃจ์ด์ ธ ์๋ค.
- ํด๋์ค ๋ก๋(Class Loader)
- ์คํ ์์ง(Execution Engine)
- ์ธํฐํ๋ฆฌํฐ(Interpreter)
- JIT ์ปดํ์ผ๋ฌ(Just-in-Time)
- ๊ฐ๋น์ง ์ฝ๋ ํฐ(Garbage collector)
- ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ (Runtime Data Area)
JIT ์ปดํ์ผ(just-in-time compliation) ๋๋ ๋์ ๋ฒ์ญ(dynamic translation) ์ด๋ผ๊ณ ํ๋ค.
JIT ์ปดํ์ผ๋ฌ๋ ํ๋ก๊ทธ๋จ์ ์ค์ ์คํํ๋ ์์ ์ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ ์ปดํ์ผ๋ฌ์ด๋ค.
์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋์
๋์๋ค.
์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ์คํํ๋ค๊ฐ ์ ์ ํ ์์ ์ ๋ฐ์ดํธ ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผํ์ฌ ๊ธฐ๊ณ์ด๋ก ๋ณ๊ฒฝํ๊ณ , ์ดํ์๋ ํด๋น ๋ ์ด์ ์ธํฐํ๋ฆฌํ
ํ์ง ์๊ณ ๊ธฐ๊ณ์ด๋ก ์ง์ ์คํํ๋ ๋ฐฉ์์ด๋ค.
๊ธฐ๊ณ์ด(์ปดํ์ผ๋ ์ฝ๋)๋ ์บ์์ ๋ณด๊ดํ๊ธฐ ๋๋ฌธ์ ํ ๋ฒ ์ปดํ์ผ๋ ์ฝ๋๋ ๋น ๋ฅด๊ฒ ์ํํ๊ฒ ๋๋ค.
๋ฌผ๋ก JIT ์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผํ๋ ๊ณผ์ ์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ธํฐํ๋ฆฌํ
ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์ค๋๊ฑธ๋ฆฌ๋ฏ๋ก ํ ๋ฒ๋ง ์คํ๋๋ ์ฝ๋๋ผ๋ฉด ์ปดํ์ผ ํ์ง ์๊ณ ์ธํฐํ๋ฆฌํ
ํ๋ ๊ฒ์ด ์ ๋ฆฌํ๋ค.
๋ฐ๋ผ์ JIT ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ JVM๋ค์ ๋ด๋ถ์ ์ผ๋ก ํด๋น ๋ฉ์๋๊ฐ ์ผ๋ง๋ ์์ฃผ ์ํ๋๋์ง ์ฒดํฌํ๊ณ ์ผ์ ์ ๋๋ฅผ ๋ฃ์๋์๋ง ์ปดํ์ผ์ ์ํํ๋ค.
์๋ฐ์์ ์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ์๋ฐ ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ๋ฐ์ดํธ ์ฝ๋๋ก ๋ณํํ ๋ค์, ์ค์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํ๋ ์์ ์์ ์๋ฐ ๊ฐ์ ๋จธ์ (JVM, ์ ํํ๋ JRE)์ด ๋ฐ์ดํธ ์ฝ๋๋ฅผ JIT ์ปดํ์ผ์ ํตํด ๊ธฐ๊ณ์ด๋ก ๋ณํํ๋ค.
Garbage Collection.
JVM์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด๋ผ๋ ํ๋ก์ธ์ค๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์๋ฐ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์์ ์ผ๋ก ์ฐพ์๋ด์ ์ ๊ฑฐํ๋ ์ญํ ์ ํ๋ค.
Java SE Runtime Environment (์๋ฐ ๋ฐํ์ ํ๊ฒฝ)
JVM + ์๋ฐ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Java Class Library) ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
์ปดํ์ผ ๋ Java ํ๋ก๊ทธ๋จ์ ์คํํ๋๋ฐ ํ์ํ ํจํค์ง์ด๋ค.
๐ก SDK๋?
Software Development Kit (์ํํธ์จ์ด ๊ฐ๋ฐ ํคํธ)
ํ๋์จ์ด ํ๋ซํผ, ์ด์์ฒด์ ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ ์์ฌ๊ฐ ์ ๊ณตํ๋ ํด์ด๋ค. ํคํธ์ ์์๋ ์ ์์ฌ๋ง๋ค ๋ค๋ฅด๋ค.
SDK์ ๋ํ์ ์ธ ์๋ก, JDK ๋ฑ์ด ์๋ค.
SDK๋ฅผ ํ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋ค.
Java SE Development Kit (์๋ฐ ๊ฐ๋ฐ ํคํธ)
Java ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ Java์ฉ SDK (Software Development Kit)์ด๋ค.
JDK ๋ JRE๋ฅผ ํฌํจํ๊ณ ์๋ค.
JRE์ ์๋ ๋ชจ๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ ์ปดํ์ผ๋ฌ(javac)์ jdb, javadoc ๊ณผ ๊ฐ์ ๋๊ตฌ๋ ์๋ค.
์ฆ, JDK๋ ํ๋ก๊ทธ๋จ์ ์์ฑ, ์คํ, ์ปดํ์ผํ ์ ์๋ค.
์์ฝ
JDK๋ ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํ, ์ปดํ์ผ, ๊ฐ๋ฐ์ฉ ๋๊ตฌ.
JRE, JVM๋ฅผ ๋ชจ๋ ํฌํจํ๋ ํฌ๊ด์ ์ด ํคํธ์ด๋ค.JRE๋ ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๊ฒ ํ๋ ๋๊ตฌ์ด๋ค. JVM์ ํฌํจํ๊ณ ์๋ค.