π₯ .java β javac β .class β JVM
β Question
μλ° μ»΄νμΌλ¬μ μν΄ ν΄λμ€ νμΌμ΄ λκ³ μ΄ ν΄λμ€ νμΌμ JVMμμ μ€ννλκ±° λ§μ?
π Answer
λ€, λ§μ΅λλ€! μλ° νλ‘κ·Έλ¨μ΄ μ€νλλ κ³Όμ μ λ€μκ³Ό κ°μ΅λλ€:
- μλ° μμ€ μ½λ μμ±: κ°λ°μλ .java νμΌμ μλ° μ½λλ₯Ό μμ±ν©λλ€.
- μ»΄νμΌ: μλ° μ»΄νμΌλ¬(javac)λ₯Ό μ¬μ©νμ¬ .java νμΌμ μ»΄νμΌνλ©΄ λ°μ΄νΈμ½λκ° ν¬ν¨λ .class νμΌμ΄ μμ±λ©λλ€. μ΄ .class νμΌμ JVMμ΄ μ΄ν΄ν μ μλ μ€κ° ννμ μ½λμ λλ€.
- μ€ν: μλ° κ°μ λ¨Έμ (JVM)μ΄ .class νμΌμ μ½μ΄μ μ€νν©λλ€. JVMμ λ°μ΄νΈμ½λλ₯Ό ν΄μνκ±°λ Just-In-Time (JIT) μ»΄νμΌλ¬λ₯Ό μ¬μ©νμ¬ λ°μ΄νΈμ½λλ₯Ό λ€μ΄ν°λΈ λ¨Έμ μ½λλ‘ λ³ννμ¬ μ€νν©λλ€.
μ¦, μλ° μμ€ μ½λλ μλ° μ»΄νμΌλ¬μ μν΄ .class νμΌλ‘ λ³νλκ³ , μ΄ .class νμΌμ JVMμμ μ€νλ©λλ€.
π₯ JVM μ’ λ₯
β Question
JVMμ μ΄λ€κ² μμ§
π Answer
μλ° κ°μ λ¨Έμ (JVM)μ μλ° νλ‘κ·Έλ¨μ μ€νμ λ΄λΉνλ μ€μν κ΅¬μ± μμλ‘, λ€μν JVM ꡬνμ²΄κ° μμ΅λλ€. μ£Όμ JVM ꡬν체λ λ€μκ³Ό κ°μ΅λλ€:
- Oracle HotSpot JVM:
- μ€λͺ : μ€λΌν΄μ JDK(μλ° κ°λ° ν€νΈ)μμ μ 곡νλ κΈ°λ³Έ JVMμ λλ€. λ리 μ¬μ©λλ©°, μ±λ₯ μ΅μ νμ λ€μν κΈ°λ₯μ μ 곡ν©λλ€.
- νΉμ§: JIT(Just-In-Time) μ»΄νμΌλ¬, κ°λΉμ§ 컬λ ν°, λ©ν°μ€λ λ© μ§μ λ±.
- OpenJ9:
- μ€λͺ : IBMμμ κ°λ°ν JVMμΌλ‘, Eclipse μ¬λ¨μ μ€ν μμ€ νλ‘μ νΈμ λλ€.
- νΉμ§: λ©λͺ¨λ¦¬ μ¬μ©κ³Ό μ€ννΈμ μλ μ΅μ ν, λ€μν κ°λΉμ§ 컬λ ν° μ΅μ μ 곡.
- GraalVM:
- μ€λͺ : μ€λΌν΄μμ κ°λ°ν JVMμΌλ‘, κ³ μ±λ₯ JIT μ»΄νμΌλ¬μ ν¨κ» λ€κ΅μ΄ μ§μμ μ 곡ν©λλ€.
- νΉμ§: μλ° μΈμλ JavaScript, Ruby, R, Python λ± μ¬λ¬ μΈμ΄λ₯Ό μ§μνλ©°, λ€μ΄ν°λΈ μ΄λ―Έμ§ κΈ°λ₯λ μ 곡.
- Zulu OpenJDK:
- μ€λͺ : Azul Systemsμμ μ 곡νλ OpenJDKμ μ€ν μμ€ λ°°ν¬νμ λλ€.
- νΉμ§: Zuluλ λ€μν νλ«νΌμμ μ¬μ©ν μ μμΌλ©°, μμ μ±κ³Ό μ±λ₯μ κ°μ‘°ν©λλ€.
- Amazon Corretto:
- μ€λͺ : Amazon Web Services(AWS)μμ μ 곡νλ μλ° SEμ λ¬΄λ£ λ°°ν¬νμ λλ€.
- νΉμ§: AWS ν΄λΌμ°λ νκ²½μ μ΅μ νλμ΄ μμΌλ©°, μ₯κΈ° μ§μ(LTS)μ μ 곡ν©λλ€.
- JRockit:
- μ€λͺ : μ€λΌν΄μ΄ μΈμν BEA Systemsμ JVMμ λλ€. νμ¬λ μ€λΌν΄μ HotSpot JVMμΌλ‘ ν΅ν©λμμ΅λλ€.
- νΉμ§: κ³ μ±λ₯κ³Ό κ΄λ¦¬ λꡬλ₯Ό κ°μ‘°νμΌλ, μ΄μ λ λ μ΄μ λ 립μ μΌλ‘ μ 곡λμ§ μμ΅λλ€.
κ° JVMμ μλ‘ λ€λ₯Έ νΉμ§κ³Ό μ±λ₯ μ΅μ ν μ΅μ μ μ 곡νλ―λ‘, νΉμ νκ²½μ΄λ μꡬμ¬νμ λ§λ JVMμ μ ννλ κ²μ΄ μ€μν©λλ€.
π₯ JDKκ° javac ν¬ν¨
β Question
μλ° μ»΄νμΌλ¬λ λ°λ‘ μ€μΉν΄μΌλΌ?
π Answer
λ€, μλ° μ»΄νμΌλ¬λ μλ° κ°λ° λꡬ(λλ JDK)μ μΌλΆλ‘ μ 곡λ©λλ€. JDK(μλ° κ°λ° ν€νΈ)λ μλ° μμ€ μ½λλ₯Ό μ»΄νμΌνκ³ μ€νν μ μλ λꡬμ λΌμ΄λΈλ¬λ¦¬λ₯Ό ν¬ν¨νκ³ μμ΅λλ€. JDKμλ μλ° μ»΄νμΌλ¬(javac), μλ° μ€ν νκ²½(java), κ·Έλ¦¬κ³ κΈ°ν μ μ©ν λꡬλ€μ΄ ν¬ν¨λμ΄ μμ΅λλ€.
μ¬κΈ°μ μ€μν μ μ:
- JDK μ€μΉ: μλ° μ»΄νμΌλ¬(javac)λ JDKμ μΌλΆλ‘ ν¬ν¨λμ΄ μκΈ° λλ¬Έμ, μλ° κ°λ°μ νλ €λ©΄ JDKλ₯Ό μ€μΉν΄μΌ ν©λλ€. JDKλ μλ° μ ν리μΌμ΄μ μ κ°λ°νκ³ μ€ννλ λ° νμν λͺ¨λ λꡬλ₯Ό μ 곡ν©λλ€.
- JREμ JDK: JRE(μλ° μ€ν νκ²½)λ μλ° μ ν리μΌμ΄μ μ μ€ννλ λ° νμν λΌμ΄λΈλ¬λ¦¬μ JVMμ ν¬ν¨νμ§λ§, μλ° μμ€ μ½λλ₯Ό μ»΄νμΌνλ κΈ°λ₯μ ν¬ν¨λμ΄ μμ§ μμ΅λλ€. λ°λΌμ μ»΄νμΌ κΈ°λ₯μ μ¬μ©νλ €λ©΄ JDKλ₯Ό μ€μΉν΄μΌ ν©λλ€.
- μ€μΉ λ°©λ²:
- Oracle JDK: μ€λΌν΄ μΉμ¬μ΄νΈμμ λ€μ΄λ‘λν μ μμ΅λλ€.
- OpenJDK: μ¬λ¬ μ€ν μμ€ νλ‘μ νΈ μ¬μ΄νΈμμ λ€μ΄λ‘λν μ μμΌλ©°, λ€μν λ°°ν¬νμ΄ μμ΅λλ€.
- Amazon Corretto: AWS μΉμ¬μ΄νΈμμ λ€μ΄λ‘λν μ μμ΅λλ€.
- Azul Zulu: Azul Systemsμ μΉμ¬μ΄νΈμμ λ€μ΄λ‘λν μ μμ΅λλ€.
- νκ²½ λ³μ μ€μ : JDKλ₯Ό μ€μΉν νμλ JAVA_HOME νκ²½ λ³μλ₯Ό μ€μ νκ³ , PATH νκ²½ λ³μμ bin λλ ν°λ¦¬λ₯Ό μΆκ°νμ¬ javacμ κ°μ λꡬλ₯Ό λͺ λ Ήμ€μμ μ¬μ©ν μ μλλ‘ ν΄μΌ ν©λλ€.
μ€μΉκ° μλ£λλ©΄, λͺ λ Ήμ€μμ javac -versionμ μ λ ₯νμ¬ μλ° μ»΄νμΌλ¬κ° μ λλ‘ μ€μΉλμλμ§ νμΈν μ μμ΅λλ€.
π₯ Java μ€μΉ
β Question
μλ°λ₯Ό μ€μΉνλ©΄ JDKκ° μλκ±°μΌ?
π Answer
μλ°λ₯Ό μ€μΉν λ, JDK(Java Development Kit)λ₯Ό μ€μΉν μ μμΌλ©°, μ΄λ μλ° μ»΄νμΌλ¬λ₯Ό ν¬ν¨ν μλ° κ°λ°μ νμν μ 체 λꡬ μ§ν©μ μ 곡ν©λλ€. κ·Έλ¬λ κΈ°λ³Έμ μΌλ‘ μλ°λ₯Ό μ€μΉν λ, μλ° μ€ν νκ²½(JRE, Java Runtime Environment)λ§ μ€μΉλλ κ²½μ°λ μμ΅λλ€. JREλ μλ° μ ν리μΌμ΄μ μ μ€ννλ λ° νμν λΌμ΄λΈλ¬λ¦¬μ JVM(Java Virtual Machine)λ§ ν¬ν¨λμ΄ μμ΅λλ€.
μλ° κ°λ°μ μν΄ JDKλ₯Ό μ€μΉνλ €λ©΄ λ€μκ³Ό κ°μ μ μ κ³ λ €ν΄μΌ ν©λλ€:
- JREμ JDKμ μ°¨μ΄:
- JRE: μλ° μ ν리μΌμ΄μ μ μ€ννλ λ° νμν νκ²½μΌλ‘, JVMκ³Ό μλ° ν΄λμ€ λΌμ΄λΈλ¬λ¦¬λ§ ν¬ν¨λμ΄ μμ΅λλ€.
- JDK: μλ° μ ν리μΌμ΄μ μ κ°λ°νλ λ° νμν λꡬλ₯Ό ν¬ν¨ν©λλ€. JDKλ JREλ₯Ό ν¬ν¨νλ©°, μΆκ°μ μΌλ‘ μλ° μ»΄νμΌλ¬(javac), μλ° λ¬Έμ μμ±κΈ°(javadoc), μλ° λλ²κ±°(jdb) λ± κ°λ°μ νμν λꡬλ€μ μ 곡ν©λλ€.
- JDK μ€μΉ:
- JDKλ₯Ό μ€μΉνλ €λ©΄, μ€λΌν΄μ JDK μΉμ¬μ΄νΈλ OpenJDK, Amazon Corretto, Azul Zulu λ± λ€λ₯Έ JDK λ°°ν¬ν μ 곡 μ¬μ΄νΈμμ λ€μ΄λ‘λνμ¬ μ€μΉν μ μμ΅λλ€.
- JDK μ€μΉ νμΌμ λ€μ΄λ‘λν ν, μ€μΉλ₯Ό μ§ννλ©΄ μλ° μ»΄νμΌλ¬μ ν¨κ» κ°λ° λκ΅¬κ° μ€μΉλ©λλ€.
- μ€μΉ λ°©λ²:
- μ€λΌν΄ JDK: Oracle JDK λ€μ΄λ‘λ νμ΄μ§μμ λ€μ΄λ‘λν μ μμ΅λλ€.
- OpenJDK: OpenJDK 곡μ μΉμ¬μ΄νΈ λλ λ€μν λ°°ν¬ν μ¬μ΄νΈμμ λ€μ΄λ‘λν μ μμ΅λλ€.
- Amazon Corretto: Amazon Corretto λ€μ΄λ‘λ νμ΄μ§μμ λ€μ΄λ‘λν μ μμ΅λλ€.
- Azul Zulu: Azul Zulu λ€μ΄λ‘λ νμ΄μ§μμ λ€μ΄λ‘λν μ μμ΅λλ€.
- μ€μΉ νμΈ:
- μ€μΉκ° μλ£λλ©΄, λͺ λ Ήμ€μμ java -versionκ³Ό javac -versionμ μ λ ₯νμ¬ μλ° λ°νμκ³Ό μ»΄νμΌλ¬κ° μ μμ μΌλ‘ μ€μΉλμλμ§ νμΈν μ μμ΅λλ€.
μ 리νμλ©΄, μλ°λ₯Ό μ€μΉνλ€κ³ ν΄μ κΈ°λ³Έμ μΌλ‘ JDKκ° μ€μΉλλ κ²μ μλλλ€. μλ° κ°λ°μ μν΄μλ λ³λλ‘ JDKλ₯Ό μ€μΉν΄μΌ νλ©°, JDKλ JREλ₯Ό ν¬ν¨νκ³ μλ° κ°λ°μ νμν λͺ¨λ λꡬλ₯Ό μ 곡ν©λλ€.
π₯ Java μ€μΉ οΉ¦ JDK μ€μΉ ?
β Question
λ³΄ν΅ μλ°λ₯Ό μ€μΉνλ€λ λ§μ JDKλ₯Ό μ€μΉνλ€λ λ§κ³Ό κ°μκ±°μΌ?
π Answer
"μλ°λ₯Ό μ€μΉνλ€"λ ννμ λ¬Έλ§₯μ λ°λΌ λ€λ₯Ό μ μμ§λ§, μΌλ°μ μΌλ‘λ λ κ°μ§ κ²½μ°κ° μμ΅λλ€:
- JDK μ€μΉ:
- μλ° κ°λ°μ μν κ²½μ°: μλ° μ ν리μΌμ΄μ μ κ°λ°νλ €λ κ²½μ°μλ JDKλ₯Ό μ€μΉνλ κ²μ΄ λ§μ΅λλ€. JDKμλ μλ° μ»΄νμΌλ¬(javac), μλ° λ°νμ(java), κ·Έλ¦¬κ³ κ°λ° λꡬλ€μ΄ ν¬ν¨λμ΄ μμ΅λλ€. λ°λΌμ "μλ°λ₯Ό μ€μΉνλ€"λ λ§μ΄ JDKλ₯Ό μ€μΉνλ€λ μλ―Έλ‘ μ¬μ©λ λκ° λ§μ΅λλ€.
- κΈ°λ₯ νμΈ: javacμ κ°μ κ°λ° λꡬλ₯Ό μ¬μ©ν΄μΌ νκ±°λ, μλ° μ ν리μΌμ΄μ μ κ°λ°νκ³ λ°°ν¬ν κ³νμ΄ μλ κ²½μ°μλ JDK μ€μΉκ° νμν©λλ€.
- JRE μ€μΉ:
- μλ° μ ν리μΌμ΄μ μ€νμ μν κ²½μ°: μλ° μ ν리μΌμ΄μ μ μ€νλ§ νκ³ κ°λ°νμ§ μλ κ²½μ°μλ JREλ§ μ€μΉν΄λ μΆ©λΆν©λλ€. JREλ JVMκ³Ό μλ° λΌμ΄λΈλ¬λ¦¬λ₯Ό ν¬ν¨νκ³ μμΌλ©°, μλ° νλ‘κ·Έλ¨μ μ€ννλ λ° νμν λͺ¨λ κ²μ μ 곡ν©λλ€.
- κ°λ° νμ μμ: μλ° μμ€ μ½λλ₯Ό μμ±νκ±°λ μ»΄νμΌν νμκ° μκ³ , λ¨μν μλ° κΈ°λ° μ ν리μΌμ΄μ μ μ€νν λͺ©μ μ΄λΌλ©΄ JREλ§ μ€μΉνλ©΄ λ©λλ€.
μμ½
- μλ° κ°λ°: JDK μ€μΉκ° νμν©λλ€. JDKλ JREλ₯Ό ν¬ν¨νκ³ μμ΄ μλ° μ ν리μΌμ΄μ μ κ°λ°κ³Ό μ€νμ΄ κ°λ₯ν©λλ€.
- μλ° μ ν리μΌμ΄μ μ€ν: JREλ§ μ€μΉνλ©΄ λ©λλ€. JREλ μλ° μ ν리μΌμ΄μ μ μ€ννλ λ° νμν λΌμ΄λΈλ¬λ¦¬μ JVMμ μ 곡ν©λλ€.
κ·Έλμ μΌλ°μ μΌλ‘ "μλ°λ₯Ό μ€μΉνλ€"λ λ§μ κ°λ°μ μν JDK μ€μΉλ₯Ό μλ―Ένλ κ²½μ°κ° λ§μ§λ§, μ ν리μΌμ΄μ μ€νλ§μ μν κ²½μ°μλ JREλ₯Ό μ€μΉνλ€κ³ μ΄ν΄ν μ μμ΅λλ€.
π₯ staticμ κ°μ²΄ μμ± μ μ μ‘΄μ¬
β Question
μλ° staticμ μΈμ€ν΄μ€ μμ±μ μ μλκ±°μμ
π Answer
λ€, λ§μ΅λλ€! μλ°μμ static ν€μλλ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ λ μ κ·Όν μ μλ λ©€λ²λ₯Ό μ μνλ λ° μ¬μ©λ©λλ€. ꡬ체μ μΌλ‘, staticμΌλ‘ μ μΈλ λ³μλ λ©μλλ ν΄λμ€κ° λ©λͺ¨λ¦¬μ λ‘λλ λ μμ±λλ©°, ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νκΈ° μ μλ μ¬μ©ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, static λ³μλ ν΄λμ€κ° λ©λͺ¨λ¦¬μ λ‘λλ λ μ΄κΈ°νλλ©°, ν΄λμ€μ λͺ¨λ μΈμ€ν΄μ€κ° 곡μ νλ λ³μμ λλ€. static λ©μλλ ν΄λμ€μ μΈμ€ν΄μ€ μμ΄ νΈμΆν μ μμ΅λλ€.
μ¬κΈ° κ°λ¨ν μμκ° μμ΅λλ€:
public class Example {
// static λ³μ
static int staticVariable = 0;
// μΈμ€ν΄μ€ λ³μ
int instanceVariable = 0;
// static λ©μλ
static void staticMethod() {
System.out.println("This is a static method.");
}
// μΈμ€ν΄μ€ λ©μλ
void instanceMethod() {
System.out.println("This is an instance method.");
}
public static void main(String[] args) {
// static λ©μλλ ν΄λμ€ μ΄λ¦μΌλ‘ νΈμΆ κ°λ₯
Example.staticMethod();
// static λ³μλ ν΄λμ€ μ΄λ¦μΌλ‘ μ κ·Ό κ°λ₯
Example.staticVariable = 10;
System.out.println("Static variable: " + Example.staticVariable);
// μΈμ€ν΄μ€ μμ± ν μΈμ€ν΄μ€ λ©μλμ λ³μ μ¬μ© κ°λ₯
Example example = new Example();
example.instanceMethod();
example.instanceVariable = 5;
System.out.println("Instance variable: " + example.instanceVariable);
}
}
μ΄ μμ μμ staticMethodμ staticVariableμ Example ν΄λμ€κ° λ©λͺ¨λ¦¬μ λ‘λλ λ μμ±λλ©°, μΈμ€ν΄μ€λ₯Ό λ§λ€μ§ μκ³ λ μ κ·Όν μ μμ΅λλ€. λ°λ©΄, instanceMethodμ instanceVariableμ μΈμ€ν΄μ€κ° μμ±λμ΄μΌλ§ μ κ·Όν μ μμ΅λλ€.
π₯ JVMμ ν΄λμ€λ‘λκ° static λ©€λ² μμ±
β Question
JVMμ ν΄λμ€λ‘λμμ ν΄λμ€λ₯Ό λ‘λν λ μμ±λλ?
π Answer
λ§μ΅λλ€. JVMμ ν΄λμ€ λ‘λκ° ν΄λμ€λ₯Ό λ‘λν λ, static λ©€λ²λ€μ΄ μμ±λ©λλ€. μμΈν μ€λͺ νμλ©΄:
- ν΄λμ€ λ‘λ©: JVMμ ν΄λμ€λ₯Ό νμλ‘ ν λ ν΄λμ€λ₯Ό λ©λͺ¨λ¦¬μ λ‘λν©λλ€. μ΄ κ³Όμ μ ν΄λμ€ λ‘λμ μν΄ μνλ©λλ€.
- ν΄λμ€ μ΄κΈ°ν: ν΄λμ€κ° μ²μ λ‘λλ λ, static λ³μμ static λΈλ‘μ΄ μ΄κΈ°νλ©λλ€. ν΄λμ€μ static λ©€λ²λ ν΄λμ€κ° λ©λͺ¨λ¦¬μ λ‘λλ λ μ΄κΈ°νλλ©°, μ΄λ ν΄λμ€μ μΈμ€ν΄μ€κ° μμ±λκΈ° μ μ λλ€.
- static λ³μ μ΄κΈ°ν: static λ³μλ ν΄λμ€κ° λ‘λλ λ ν λ²λ§ μ΄κΈ°νλ©λλ€. μ΄λ ν΄λμ€ λ‘λκ° ν΄λμ€λ₯Ό λ©λͺ¨λ¦¬μ λ‘λν λ μνλ©λλ€. μ΄κΈ°νλ ν΄λμ€μ static λΈλ‘μ ν¬ν¨νμ¬ static λ³μμ μ μΈ λ° μ΄κΈ°κ°μ ν΅ν΄ μ΄λ£¨μ΄μ§λλ€.
- static λΈλ‘ μ€ν: static λΈλ‘μ ν΄λμ€κ° λ‘λλ λ ν λ² μ€νλ©λλ€. μ΄ λΈλ‘μ static λ³μλ₯Ό μ΄κΈ°ννκ±°λ λ€λ₯Έ static μ΄κΈ°ν μμ μ μννλ λ° μ¬μ©λ©λλ€.
λ€μμ μ΄λ₯Ό μ€λͺ νλ μμ μ λλ€:
public class StaticExample {
// static λ³μ
static int staticVariable = 10;
// static λΈλ‘
static {
System.out.println("Static block executed.");
staticVariable = 20;
}
public static void main(String[] args) {
// static λ³μ μΆλ ₯
System.out.println("Static variable: " + StaticExample.staticVariable);
}
}
μ΄ μμ μμ:
- StaticExample ν΄λμ€κ° μ²μ λ‘λλ λ, static λ³μ staticVariableμ΄ 10μΌλ‘ μ΄κΈ°νλ©λλ€.
- μ΄ν static λΈλ‘μ΄ μ€νλμ΄ "Static block executed."κ° μΆλ ₯λλ©°, staticVariableμ κ°μ΄ 20μΌλ‘ λ³κ²½λ©λλ€.
- main λ©μλκ° μ€νλ λ, staticVariableμ κ°μ 20μΌλ‘ μΆλ ₯λ©λλ€.
μ 리νμλ©΄, static λ©€λ²λ€μ ν΄λμ€κ° JVMμ ν΄λμ€ λ‘λμ μν΄ λ©λͺ¨λ¦¬μ λ‘λλκ³ μ΄κΈ°νλ λ μμ±λ©λλ€. ν΄λμ€μ μΈμ€ν΄μ€κ° μμ±λκΈ° μ μ μ΄κΈ°νκ° μ΄λ£¨μ΄μ§λλ€.
'Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μλ° enum (0) | 2024.12.09 |
---|---|
μλ° λ¦¬νλ μ (0) | 2024.12.07 |
[Java] Reflection (2) | 2024.02.21 |
Generics (Java) (1) | 2024.02.12 |
JVM λ©λͺ¨λ¦¬ ꡬ쑰 (JAVA) (1) | 2024.02.08 |
λκΈ