μΆμ²
ChatGPT
μ΅λͺ λ΄λΆ ν΄λμ€(Anonymous Inner Class)λ μλ°μμ ν΄λμ€λ₯Ό μ μνμ§ μκ³ λ ν΄λμ€λ₯Ό μμ±νκ³ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μκ² ν΄μ£Όλ κΈ°λ₯μ΄λ€. μ΅λͺ λ΄λΆ ν΄λμ€λ λ³΄ν΅ μ΄λ²€νΈ νΈλ€λ¬λ μ½λ°± ꡬν체λ₯Ό μμ±ν λ μ μ©νκ² μ¬μ©λλ€. μ΄λ¬ν ν΄λμ€λ μ½λκ° κ°κ²°νκ³ , ν λ²λ§ μ¬μ©λλ κ²½μ°μ μ ν©νλ€.
μ΅λͺ λ΄λΆ ν΄λμ€μ λ©λͺ¨λ¦¬μμμ μμ± λ° λ‘λ κ³Όμ μ λ€μκ³Ό κ°λ€.
μ΅λͺ λ΄λΆ ν΄λμ€ μμ± κ³Όμ
1. ν΄λμ€ λ‘λ©
μ΅λͺ λ΄λΆ ν΄λμ€λ ν΄λμ€ λ‘λμ μν΄ λ‘λλλ€. μ΄ κ³Όμ μμ μλ° μ»΄νμΌλ¬λ μ΅λͺ λ΄λΆ ν΄λμ€μ μ΄λ¦μ μλμΌλ‘ μμ±νλ€. μ΄ μ΄λ¦μ μΌλ°μ μΌλ‘ μΈλΆ ν΄λμ€μ μ΄λ¦κ³Ό μ΅λͺ λ΄λΆ ν΄λμ€μ μΈμ€ν΄μ€ λ²νΈλ₯Ό ν¬ν¨νλ€. μλ₯Ό λ€μ΄, OuterClass$1κ³Ό κ°μ μ΄λ¦μ κ°μ§ μ μλ€.
2. ν΄λμ€ μ μ
μ΅λͺ λ΄λΆ ν΄λμ€λ μΈλΆ ν΄λμ€μ μΈμ€ν΄μ€ μμ± μ λ΄λΆ ν΄λμ€ μ μλ‘ μμ±λλ€. μ΅λͺ λ΄λΆ ν΄λμ€μ μ μλ μΈλΆ ν΄λμ€μ μμ±μ λλ λ©μλ λ΄μμ μμ±λλ€. μ»΄νμΌλ¬λ μ΄λ₯Ό λ°νμΌλ‘ μ΅λͺ ν΄λμ€λ₯Ό μ μνκ³ , μλ‘μ΄ .class νμΌμ μμ±νλ€.
3. μΈμ€ν΄μ€ μμ±
μ΅λͺ λ΄λΆ ν΄λμ€μ μΈμ€ν΄μ€λ μΈλΆ ν΄λμ€μ μΈμ€ν΄μ€μ ν¨κ» μμ±λλ€. μ΅λͺ λ΄λΆ ν΄λμ€λ μΈλΆ ν΄λμ€μ μΈμ€ν΄μ€μ λν μ°Έμ‘°λ₯Ό μ묡μ μΌλ‘ κ°μ§κ³ μμΌλ©°, μμ±λ μΈμ€ν΄μ€λ μΈλΆ ν΄λμ€μ μΈμ€ν΄μ€μ κ΄λ ¨μ΄ μλ€.
λ©λͺ¨λ¦¬μμμ μλ
1. ν΄λμ€ νμΌ μμ± (ν΄λμ€ λ 벨)
μ΅λͺ λ΄λΆ ν΄λμ€λ μ»΄νμΌ ν μλ‘μ΄ .class νμΌλ‘ μμ±λλ€. μ΄ ν΄λμ€ νμΌμ μ΅λͺ λ΄λΆ ν΄λμ€μ μ½λμ λ°μ΄νΈμ½λλ₯Ό ν¬ν¨νλ€. μ΄ ν΄λμ€ νμΌμ JVMμ λ©λͺ¨λ¦¬ μμ(ν΄λμ€ μμ)μ λ‘λλλ€.
2. ν΄λμ€ μμμ λ‘λ (ν΄λμ€ λ 벨)
JVMμ ν΄λμ€ λ‘λλ₯Ό μ¬μ©νμ¬ μ΅λͺ λ΄λΆ ν΄λμ€λ₯Ό λ©λͺ¨λ¦¬μ λ‘λνλ€. μ΅λͺ λ΄λΆ ν΄λμ€λ Class κ°μ²΄λ‘ λ©λͺ¨λ¦¬μ μ μ₯λλ©°, μ΄ Class κ°μ²΄λ JVMμ λ©μλ μμμ μμΉνλ€.
3. μΈμ€ν΄μ€ μμ± λ° μ μ₯ (μΈμ€ν΄μ€ λ 벨)
μ΅λͺ λ΄λΆ ν΄λμ€μ μΈμ€ν΄μ€λ ν λ©λͺ¨λ¦¬μ μ μ₯λλ€. μ΄ μΈμ€ν΄μ€λ μΈλΆ ν΄λμ€μ μΈμ€ν΄μ€μ ν¨κ» μμ±λλ©°, μ΅λͺ λ΄λΆ ν΄λμ€μ λͺ¨λ μΈμ€ν΄μ€ λ³μμ λ©μλλ κ°μ²΄μ μνλ₯Ό μ μ§νλ€.
4. ν΄λ‘μ (Closure) λ° μΊ‘μ² (μΈμ€ν΄μ€ λ 벨)
- κ΄λ ¨ κΈ -> [μ©μ΄][Java] ν΄λ‘μ (Closure)
- κ΄λ ¨ κΈ -> [Java] "λ³μμ λ©μλλ₯Ό μΊ‘μ²νλ€" μλ―Έ
μ΅λͺ λ΄λΆ ν΄λμ€λ μΈλΆ ν΄λμ€μ μΈμ€ν΄μ€ λ³μμ λ©μλλ₯Ό μΊ‘μ²ν μ μλ€. μ΄λ¬ν μΊ‘μ²λ λ³μλ€μ μ΅λͺ λ΄λΆ ν΄λμ€μ μΈμ€ν΄μ€κ° μμ±λ λ ν¨κ» μ μ₯λλ€. μ΄λ‘ μΈν΄ λ©λͺ¨λ¦¬μμ μΆκ°μ μΈ μ°Έμ‘°κ° λ°μν μ μλ€.
5. λ©μλ νΈμΆ (μΈμ€ν΄μ€ λ 벨)
μ΅λͺ λ΄λΆ ν΄λμ€μ λ©μλλ μΌλ°μ μΈ ν΄λμ€μ κ°μ΄ νΈμΆλ μ μμΌλ©°, λ©μλ μμμ μ μ₯λ λ°μ΄νΈμ½λκ° μ€νλλ€. μ΄λ¬ν λ©μλλ μ΅λͺ λ΄λΆ ν΄λμ€μ μΈμ€ν΄μ€μ λ°μΈλ©λμ΄ μ€νλλ€.
μμ μ½λμ λ©λͺ¨λ¦¬ κ³Όμ
public class OuterClass {
private String outerField = "Outer";
public void createAnonymousClass() {
// μ΅λͺ
λ΄λΆ ν΄λμ€
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println(outerField);
}
};
new Thread(r).start();
}
}
1. ν΄λμ€ λ‘λ©
μ»΄νμΌλ¬λ OuterClass$1μ΄λΌλ μ΄λ¦μ μ΅λͺ λ΄λΆ ν΄λμ€λ₯Ό μμ±νλ€. μ΄ ν΄λμ€λ Runnable μΈν°νμ΄μ€λ₯Ό ꡬννλ€.
2. ν΄λμ€ μ μ λ° λ‘λ
OuterClass$1.class νμΌμ΄ μμ±λκ³ , JVMμ μν΄ λ©μλ μμμ λ‘λλλ€.
3. μΈμ€ν΄μ€ μμ±
createAnonymousClass λ©μλκ° νΈμΆλ λ μ΅λͺ λ΄λΆ ν΄λμ€μ μΈμ€ν΄μ€κ° ν λ©λͺ¨λ¦¬μ μμ±λλ€. μ΄ μΈμ€ν΄μ€λ Runnable μΈν°νμ΄μ€μ run λ©μλλ₯Ό ꡬννλ€.
4. μΊ‘μ² λ° μ°Έμ‘°
μ΅λͺ λ΄λΆ ν΄λμ€λ OuterClassμ outerFieldλ₯Ό μΊ‘μ²νμ¬ μ¬μ©νλ€. μ΄ λ³μμ λν μ°Έμ‘°λ μ΅λͺ λ΄λΆ ν΄λμ€μ μΈμ€ν΄μ€μ ν¨κ» μ μ₯λλ€.
5. λ©μλ νΈμΆ
new Thread(r).start()λ₯Ό ν΅ν΄ μ΅λͺ λ΄λΆ ν΄λμ€μ run λ©μλκ° νΈμΆλλ€. μ΄ λ©μλλ JVMμ λ©μλ μμμμ μ€νλλ€.
κ²°λ‘
μ΅λͺ λ΄λΆ ν΄λμ€λ λ©λͺ¨λ¦¬μμ λ€μκ³Ό κ°μ κ³Όμ μ κ±°μΉλ€: μ»΄νμΌλ¬κ° ν΄λμ€λ₯Ό μμ±νκ³ , ν΄λμ€ λ‘λκ° μ΄λ₯Ό λ©μλ μμμ λ‘λνλ©°, ν λ©λͺ¨λ¦¬μ μΈμ€ν΄μ€κ° μμ±λκ³ , μΈλΆ ν΄λμ€μ μ°Έμ‘°λ₯Ό μΊ‘μ²νμ¬ κ΄λ¦¬λλ€. μ΄λ¬ν κ³Όμ μ ν΅ν΄ μ΅λͺ λ΄λΆ ν΄λμ€λ μ½λμ κ°κ²°μ±κ³Ό μ μ°μ±μ μ 곡νλ©°, μΌνμ± λλ κ°λ¨ν μ½λ°± ꡬνμ μ ν©λ€.
ChatGPT κΈμ μΆμ²
μ΅λͺ λ΄λΆ ν΄λμ€μ λμκ³Ό λ©λͺ¨λ¦¬ κ΄λ¦¬μ κ΄ν λ΄μ©μ μλ°μ 곡μ λ¬Έμμ κ΄λ ¨λ μλ£λ€μμ νμΈν μ μμ΅λλ€. λ€μμ ν΄λΉ λ΄μ©μ μ€λͺ νλ λ° λμμ΄ λλ μ£Όμ μΆμ²μ λλ€:
- Oracle Java Documentation:
- Java Language Specification (JLS) : μλ° μΈμ΄ μ¬μμμλ μ΅λͺ λ΄λΆ ν΄λμ€μ λν μ μμ λμμ μμΈν μ€λͺ ν©λλ€. μ΅λͺ λ΄λΆ ν΄λμ€μ μμ±κ³Ό ν΄λμ€ λ‘λ©, λ©λͺ¨λ¦¬μμμ κ΄λ¦¬ λ±μ λν΄ μμΈν λ€λ£Ήλλ€.
- Effective Java (by Joshua Bloch):
- μ΄ μ± μ μλ° νλ‘κ·Έλλ°μμ κΆμ₯λλ λ€μν κΈ°λ²μ λ€λ£¨λ©°, μ΅λͺ λ΄λΆ ν΄λμ€μ κ΄λ ¨λ λ΄μ©λ ν¬ν¨λμ΄ μμ΅λλ€. μ΅λͺ λ΄λΆ ν΄λμ€μ μ¬μ© μ¬λ‘μ μ±λ₯ κ³ λ €μ¬ν λ±μ μ€λͺ ν©λλ€.
- Oracle Java Tutorials:
- Anonymous Classes : μ΅λͺ λ΄λΆ ν΄λμ€μ μ¬μ©λ²κ³Ό λμμ λν 곡μ μλ° νν 리μΌμ μ 곡ν©λλ€.
- Java Concurrency in Practice (by Brian Goetz):
- μ΄ μ± μ μλ°μμμ λμμ± λ¬Έμ μ κ΄λ ¨λ λ€μν μ£Όμ λ₯Ό λ€λ£¨λ©°, μ΅λͺ λ΄λΆ ν΄λμ€κ° λ©ν°μ€λ λ©μμ μ΄λ»κ² μ¬μ©λ μ μλμ§λ₯Ό μ€λͺ ν©λλ€.
μ΄ μλ£λ€μ μ΅λͺ λ΄λΆ ν΄λμ€μ λ©λͺ¨λ¦¬μμμ λμκ³Ό κ΄λ ¨λ μΈλΆ μ¬νμ μ΄ν΄νλ λ° μ μ©ν μ 보λ₯Ό μ 곡ν©λλ€. νΉν JLSμ Oracle Java Tutorialsλ μλ° μΈμ΄μ 곡μ λ¬Έμλ‘μ κ°μ₯ μ λ’°ν μ μλ μΆμ²μ λλ€.
'λΉ κ΅¬λ© μ±μ°κΈ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] Member inner classμ λ©λͺ¨λ¦¬ λ‘λ λ° μμ± (0) | 2024.08.19 |
---|---|
[Java] Local classμ λ©λͺ¨λ¦¬ λ‘λ λ° μμ± (0) | 2024.08.19 |
[Java] "λ³μμ λ©μλλ₯Ό μΊ‘μ²νλ€" μλ―Έ (0) | 2024.08.19 |
[μ©μ΄][Java] ν΄λ‘μ (Closure) (0) | 2024.08.19 |
[Java] μμ νμ κ³Ό Wrapper ν΄λμ€κ° μλ μ΄μ (0) | 2024.08.19 |