JDK (Java Development Kit)
JDK๋ ์๋ฐ ๊ฐ๋ฐ ํคํธ์ ์ฝ์๋ก, ๊ฐ๋ฐ์๋ค์ด ์๋ฐ๋ก ๊ฐ๋ฐํ๋๋ฐ ์ฌ์ฉ๋๋ SDK ํคํธ๋ผ ์๊ฐํ๋ฉด ๋๋ค. ๊ทธ๋์ JDK ์์๋ ์๋ฐ๋ฅผ ๊ฐ๋ฐ ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๊ณผ javac, javadoc ๋ฑ์ ๊ฐ๋ฐ ๋๊ตฌ๊ฐ ํฌํจ๋์ด ์๊ณ , ์๋ฐ ํ๋ก๊ทธ๋จ ์คํ์ ์ํ JRE๋ ํจ๊ป ํฌํจ๋์ด ์๋ค.
SDK?
SDK(Software Development Kit)๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ํ ๋๊ตฌ ๋ชจ์์ ์๋ฏธํ๋ค. ๊ฐ๋ฐ์๊ฐ ๊ธฐ์กด ์ํํธ์จ์ด๋ฅผ ํ์ฉํด ์๋ก์ด ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ ์ ์๋๋ก ์ง์ํ๋ค.
์ปดํ์ผ๋ฌ, ๋๋ฒ๊ฑฐ, API ๋ฑ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ, ํน์ ํ๋ซํผ์ฉ ์ฑ์ ๊ฐ๋ฐํ ์ ์๋ค. ์์๋ก ์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ์๋ Java๋ฅผ ํฌํจํ SDK, iOS ๊ฐ๋ฐ์๋ Swift๊ฐ ํฌํจ๋ iOS SDK, MS Windows ๊ฐ๋ฐ์๋ .NET์ ํฌํจํ .NET Framework SDK๊ฐ ์ฌ์ฉ๋๋ค.
JDK Version
์๋ฐ์ ๋ฒ์ ์ ํํํ ๋๋ ๋ณดํต JDK ๋๋ Java SE ๋ฒ์ ์ผ๋ก ๋ํ๋ธ๋ค.
โข
Java SE(Java Standard Edition)
โฆ
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํด๋์ค ํจํค์ง๋ก ๊ตฌ์ฑ
โฆ
PC์ฉ ์ ํ๋ฆฌ์ผ์ด์
, ์์ฉํ๋ก๊ทธ๋จ ๊ฐ๋ฐ, ์น ๊ฐ๋ฐ, ์๋๋ก์ด๋ ๊ฐ๋ฐ
โฆ
PC์ ์ค์นํด์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ ๊ดํ ๊ฒ
โข
Java EE(Java Enterprise Edition)
โฆ
๋๊ท๋ชจ ๊ธฐ์
์ฉ ์๋ฃจ์
๊ฐ๋ฐ, ๋ชจ๋ฐ์ผํฐ, ์
ํ ๋ฐ์ค ๋ฑ ๊ฐ๋ฐ
โข
Java ME(Java Micro Edition)
โฆ
์์ ๊ธฐ๊ธฐ๋ฅผ ๋ค๋ฃจ๋๋ฐ ์ด์ฉํ๋ ์๋์
โฆ
Java SE๋ฅผ ๋ผ์ดํธํ๊ฒ ๋ง๋ ๊ฒ
โข
Java FX
โฆ
๊ฐ๋ณ๊ณ ์์ GUI๋ฅผ ์ ๊ณตํ๋ ์๋์
๋ณดํต Java 11, Java 17 ๋ฑ์ ๋ฒ์ ์ ๋งํ๋ ๊ฒ์ ๊ฒฐ๊ตญ JDK์ ๋ฒ์ ์ ์๋ฏธํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
โ Java๋ฅผ ์ค์นํ๋ค == JDK๋ฅผ ์ค์นํ๋ค
๋ค์ํ JDK
โข
Oracle JDK - Oracle์์ ์ ๋ก ๋ผ์ด์ผ์ค๋ก ์ ๊ณตํ๋ JDK
โข
Open JDK - ์ ๋ช
ํ ๋ฌด๋ฃ JDK
โข
Azul Zulu - ์ธ์ง๋๊ฐ ๋์ JDK ์ค ํ๋์ด๋ฉฐ, Mac ๋ฑ์์ ์ฌ์ฉํ ์ ์๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ํน์ง
โข
Amazon Corretto - AWS์์ ์ ๊ณตํ๋ JDK
โข
Temurin - Eclipse์์ ์ ๊ณตํ๋ JDK. Eclipse๋ฅผ ์ฌ์ฉํ๋ค๋ฉด Temurin ์ค์น๋ฅผ ์ถ์ฒ
JRE (Java Runtime Environment)
JRE๋ ์๋ฐ ์คํ ํ๊ฒฝ์ ์ฝ์๋ก, JVM๊ณผ ์๋ฐ ํ๋ก๊ทธ๋จ ์คํ ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ API๋ฅผ ํจ๊ป ๋ฌถ์ด์ ๋ฐฐํฌ๋๋ ํจํค์ง์ด๋ค. ์ด์ธ์๋ ์๋ฐ ๋ฐํ์ ํ๊ฒฝ์์ ์ฌ์ฉํ๋ ํ๋กํผํฐ ์ธํ
์ด๋ ๋ฆฌ์์ค ํ์ผ(jar ํ์ผ)์ ๊ฐ์ง๊ณ ์๋ค.
๊ฐ๋จํ, Java๋ก ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋ ค๋ฉด JDK๊ฐ, ์ปดํ์ผ ๋ Java ํ๋ก๊ทธ๋จ์ ์คํ์ํค๋ ค๋ฉด JRE๊ฐ ํ์ํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
JRE๋ ๊ธฐ๋ณธ์ ์ผ๋ก JDK์ ํฌํจ๋์ด ์๊ธฐ์ JDK๋ฅผ ์ค์นํ๋ฉด ํจ๊ป ์ค์น๋๋ค.
JVM (Java Virtual Machine)
JVM์ ์๋ฐ ๊ฐ์ ๋จธ์ ์ ์ฝ์๋ก, ๊ทธ๋ฅ ์๋ฐ๋ฅผ ๋๋ฆฌ๋ ํ๋ก๊ทธ๋จ ์ ๋๋ก ์ดํดํ๋ฉด ๋๋ค.
Java๋ผ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ธ๊ธฐ ์๋ ํต์ฌ ์ด์ ์ค ํ๋๊ฐ ๋ฐ๋ก ์ด JVM์ธ๋ฐ, JVM์ ์ฌ์ฉํจ์ผ๋ก์จ ์ป๋ ๊ฐ์ฅ ํฐ ์ด์ ์ Java ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ํ๋ซํผ์์ ์ ์ฝ ์์ด ๋์ํ ์ ์๋๋ก ํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
java.compareTo(c)
Java๋ OS์ ์ข
์์ ์ด์ง ์๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค. OS์ ์ข
์๋ฐ์ง ์๊ณ ์คํ๋๋ ค๋ฉด OS ์์์ Java๋ฅผ ์คํ์ํฌ ๋ฌด์ธ๊ฐ๊ฐ ํ์ํ๋ฐ, ๊ทธ๊ฒ ๋ฐ๋ก JVM์ด๋ค. ๋ง๊ทธ๋๋ก ๊ฐ์ ๋จธ์ .
C (WOCA)
c์ธ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์คํํ๋ฉด exe ํ์ผ๋ก ๋จ์ด์ ธ, ๊ทธ exe ํ์ผ์ ์คํํ๋ฉด c์ธ์ด ์ฝ๋๊ฐ ์คํ๋๋ค. ๊ฐ๋ฐ์๊ฐ ์์ค ์ฝ๋๋ฅผ ์์ฑํ๋ฉด, ๊ธฐ๊ณ์ ๋ง์ถฐ์ง ์ปดํ์ผ๋ฌ๊ฐ ๊ฐ ๊ธฐ๊ณ๊ฐ ์ดํดํ๋ ๊ธฐ๊ณ์ด๋ก ๋ณํํด์ฃผ์ด ์คํ ํ๋ก๊ทธ๋จ(exe)์ ๋ง๋ค์ด ์ฃผ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ์ปดํ์ผ๋ ์ฝ๋๋ฅผ Binary Code(๊ธฐ๊ณ์ด)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด๋ฅผ WOCA(Write Once, Compile Anywhere)๋ผ๊ณ ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด ๊ธฐ๊ณ์ด๋ ์ฌ์ฉํ๋ ์ด์ ์ฒด์ ์ ์ข
์์ ์ด๋ผ๋ ํน์ง์ด ์๋ค. ์๋ฅผ ๋ค์ด, ๋ฆฌ๋
์ค์์ ์ปดํ์ผํ์ฌ ๋ง๋ ์คํํ์ผ์ ์๋์ฐ์์ ์คํํ๋ฉด, ๋์๊ฐ์ง ์๊ฒ ๋๋ค. ์ด์ฒ๋ผ OS๋ง๋ค ์ฐจ์ด๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ OS๋ณ๋ก ๋ณ๋์ ์ปดํ์ผ๋ฌ๋ฅผ ํตํ ํฌ๋ก์ค ์ปดํ์ผ(Cross Compile)์ด ํ์ํ๊ฒ ๋๋ค. ๊ท๋ชจ๊ฐ ํฐ ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ ์ปดํ์ผ์๋ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์๋ค๋ ์ ์ ๊ณ ๋ คํ ๋, ์ด๋ ํ๋ก๊ทธ๋จ์ ์ ์ฐ์ฑ๊ณผ ์ด์์ฑ์ ๋จ์ด๋จ๋ฆฌ๊ฒ ๋๋ค.
Java (WORA)
์ด๋ฌํ OS ์์กด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ Java(JVM)๊ฐ ๋ฑ์ฅํ๋ค. Java ์ธ์ด๋ก ์์ฑํ ์์คํ์ผ์ ์ง์ ์ด์์ฒด์ ๋ก ๊ฐ์ ์คํํ๋ ๊ฒ์ด ์๋, JVM์ ๊ฑฐ์ณ์ ์ด์์ฒด์ ์ ์ํธ์์ฉ์ ํ๊ฒ ๋๋ค. ์ด ๋ง์ JVM๋ง ์์ผ๋ฉด ์ด์์ฒด์ ๊ฐ ๋ฆฌ๋
์ค๋ , ๋งฅ์ด๋ ๊ด๊ณ์์ด์ด์์ฒด์ ๋ก๋ถํฐ ๋
๋ฆฝ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ ์ฝ์์ด ์คํํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค. ์ด๊ฒ์ด ๊ฐ๋ฅํ ์ด์ ๋ ์ปดํ์ผ๋ ์ฝ๋์ ํ๋์จ์ด/OS ์ฌ์ด ์ค๊ฐ์์, ํด๋น ํ๋์จ์ด/OS ํ๊ฒฝ์ ์๋ง๊ฒ JVM์ด Byte Code๋ก ๋ณํํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
1.
Java Compiler๊ฐ Java๋ก ์์ฑ๋ ์์ค ์ฝ๋ .java ํ์ผ์ .class ํ์ผ์ธ Byte Code๋ก ์ปดํ์ผํ๋ค.
2.
Byte Code๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํ์ํค๊ธฐ ์ํด ๊ฐ์ CPU๊ฐ ํ์ํ๋ฐ, ์ด๊ฒ์ด JVM์ ์ญํ ์ด๋ค.
3.
JVM์ด Byte Code๋ฅผ ๊ธฐ๊ณ์ด(Binary Code)๋ก ๋ณํํ๋ค.
4.
์ด๋ ๊ฒ JVM์ ์ํด ์ปดํ์ผ๋ ๊ธฐ๊ณ์ด๋ ๋ฐ๋ก CPU์์ ์คํ๋์ด ์ฌ์ฉ์์๊ฒ ์๋น์ค๋ฅผ ์ ๊ณตํด์ค๋ค.
์ด์ฒ๋ผ Java๋ WORA(Write Once, Read Anywhere)์ด๋ผ๋ ์ฌ์ปดํ์ผํ ํ์๊ฐ ์๊ณ ๋ฐ๋ก ๊ธฐ๊ณ๊ฐ ์ฝ๊ณ ์คํํ ์ ์๊ฒ ํ๋ ํน์ฑ์ ๊ฐ์ง๋ค.
๋จ, ๊ฐ๊ณผํ๋ฉด ์๋๋ ์ ์ JVM ์์ฒด๋ OS์ ์ข
์์ ์ด๋ฏ๋ก, ๊ฐ ์ด์์ฒด์ ์ ๋ง๋ JVM์ ์ค์นํด์ผํ ํ์๊ฐ ์๋ค๋ ๊ฒ. ์ฌ์ฉ์ ์
์ฅ์์๋ C๋ Java๋ ๋๊ฐ์ด ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ํ๊ธฐ ์ํด ๋จธ์ ์ ์ค์นํด์ผ ํ๋ค๋ ์ ์์ ๋ณ ์ฐจ์ด๊ฐ ์๊ฒ ๋๊ปด์ง ์๋ ์๋ค. ํ์ง๋ง ๊ฐ๋ฐ์ ์
์ฅ์์๋ ์๋์ฐ์ฉ C์ฝ๋์ ๋ฆฌ๋
์ค์ฉ C์ฝ๋๋ฅผ ๊ฐ๊ฐ ๋ง๋ค์ด์ผ ํ๋ ๋ถํธํจ์์, Java๋ ํ ๋ฒ ๊ฐ๋ฐํด๋๋ฉด OS์ ๋ง๋ JVM๋ง ์ ์ค์นํด์ฃผ๋ฉด ์ด๋๋ ๊ตฌ๋์ด ๊ฐ๋ฅํ๊ธฐ์ ํจ์จ์ฑ๊ณผ ์์ฐ์ฑ์ด ๋งค์ฐ ๋์์ง๋ค.
๊ทธ๋ฌ๋ Java ํ๋ก๊ทธ๋จ์ ์ผ๋ฐ ํ๋ก๊ทธ๋จ๋ณด๋ค JVM์ด๋ผ๋ ํ ๋จ๊ณ๋ฅผ ๋ ๊ฑฐ์ณ์ผํ๋ฏ๋ก, ๊ฒฐ๊ตญ์ ์๋์ ์ผ๋ก ์คํ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ ๊ฐ์ง๊ณ ์๋ค.
์ฆ, Java๋ C์ธ์ด์ ๋ฌ๋ฆฌ ๋ ๋ฒ์ ์ปดํ์ผ๋ก ์ธํ ์๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ฐ, ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด JIT ์ปดํ์ผ๋ฌ๋ผ๋ ๋ด๋ถ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํด์ ํ์ํ ๋ถ๋ถ๋ง์ ๊ธฐ๊ณ์ด๋ก ๋ฐ๊พธ์ด ์ค์ผ๋ก์จ ์ฑ๋ฅ ํฅ์์ ๊ฐ์ ธ์์ง๋ง ๊ทธ๋ผ์๋ C์ธ์ด์ ์คํ ์๋๋ฅผ ๋ฐ๋ผ์ก์ง๋ ๋ชปํ๋ค. ๊ฒ์์ด๋ ์๋ฒ ๋๋์์ C๊ณ์ด ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ์ด ๋๋ฌธ์ด๊ธฐ๋ ํ๋ค.
JIT Compiler (Just In Time Compiler)
๊ธฐ์กด์ ์๋ฐ๋ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ๋ช
๋ น์ด๋ฅผ ํ๋์ฉ ์คํํ๊ฒ๋ ์ด๋ฃจ์ด์ ธ ์์ด ์คํ ์๋๊ฐ ๋๋ ธ๋ค. ํ์ง๋ง ํ๋์จ์ด๊ฐ ๋ฐ์ ํ๋ฉด์ ์๋ฐ ์ปดํ์ผ๋ฌ๋ JIT ๋ฐฉ์์ผ๋ก ๊ฐ์ ๋์ด ์๋๋ฉด์์ ์๋นํ ๊ฐ์ ์ ์ด๋ฃจ์๋ค.
JIT ์ปดํ์ผ๋ฌ๋ ๊ฐ์ ์ฝ๋๋ฅผ ๋งค๋ฒ ํด์ํ์ง ์๊ณ , ์คํํ ๋ ์ปดํ์ผ์ ํ๋ฉด์ ํด๋น ์ฝ๋๋ฅผ ์บ์ฑํ๋ค. ์ดํ์๋ ๋ฐ๋ ๋ถ๋ถ๋ง ์ปดํ์ผํ๊ณ ๋๋จธ์ง๋ ์บ์ฑ๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ค.
๋์ ๋ฒ์ญ(dynamic translation)์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ ์ด ๊ธฐ๋ฒ์ ์ด์ ์ ์๋ฐ ํด์๊ธฐ ๋ฐฉ์๋ณด๋ค ์ฑ๋ฅ์ด 10๋ฐฐ ~ 20๋ฐฐ ์ ๋ ๋ ์ข๋ค.