μΆμ²
ChatGPT
μλ°μμ "λ³μμ λ©μλλ₯Ό μΊ‘μ²νλ€"λ ννμ μ£Όλ‘ μ΅λͺ λ΄λΆ ν΄λμ€(Anonymous Inner Class)μ κ΄λ ¨λ κ°λ μ΄λ€. μ΄ μ©μ΄λ μ΅λͺ λ΄λΆ ν΄λμ€κ° μΈλΆ ν΄λμ€μ λ³μμ λ©μλλ₯Ό μ°Έμ‘°νκ³ , μ΄λ₯Ό μ¬μ©ν μ μλ λ°©μμ μ€λͺ νλ€. μΊ‘μ²λ μ£Όλ‘ ν΄λ‘μ (Closure)μ κ΄λ ¨λ κ°λ μΌλ‘, μ΅λͺ λ΄λΆ ν΄λμ€κ° μΈλΆ 컨ν μ€νΈμ μνλ₯Ό μ μ§νκ³ νμ©ν μ μκ² νλ€.
μΊ‘μ²μ μλ―Έ
1. λ³μ μΊ‘μ²
- μ΅λͺ λ΄λΆ ν΄λμ€λ μΈλΆ ν΄λμ€μ μΈμ€ν΄μ€ λ³μμ λ‘컬 λ³μλ₯Ό μ°Έμ‘°ν μ μλ€. μ΄λ¬ν λ³μλ₯Ό "μΊ‘μ²"νλ€κ³ νννλ€. μΊ‘μ²λ λ³μλ μ΅λͺ λ΄λΆ ν΄λμ€μ μΈμ€ν΄μ€μ ν¨κ» μ μ₯λλ©°, μ΅λͺ λ΄λΆ ν΄λμ€κ° μμ±λ μμ μ λ³μ κ°μ μ μ§νλ€.
- μΊ‘μ²λλ λ³μλ λ°λμ finalμ΄κ±°λ effectively finalμ΄μ΄μΌ νλ€. effectively finalμ΄λ λ³μμ κ°μ΄ μ΄κΈ°ν μ΄νμ λ³κ²½λμ§ μλ κ²μ μλ―Ένλ€. μ΄λ μλ°μ μ΅λͺ λ΄λΆ ν΄λμ€κ° λ³μμ λ³λμ±μ μ²λ¦¬ν μ μκΈ° λλ¬Έμ μ΄λ¬ν μ μ½μ΄ νμνλ€.
2. λ©μλ μΊ‘μ²
- μ΅λͺ λ΄λΆ ν΄λμ€λ μΈλΆ ν΄λμ€μ λ©μλμ μ μλ λ³μλ€λ μ°Έμ‘°ν μ μλ€. λ©μλ λ΄μμ μ μΈλ λ³μλ€μ΄ μ΅λͺ λ΄λΆ ν΄λμ€μ λ©μλμμ μ¬μ©λ μ μλ€. μ΄λ¬ν λ³μλ€μ λ©μλμ μ€μ½ν λ΄μμ μΊ‘μ²λμ΄ μ΅λͺ λ΄λΆ ν΄λμ€μ μΈμ€ν΄μ€μ ν¨κ» μ μ₯λλ€.
μμ
λ€μμ λ³μμ λ©μλλ₯Ό μΊ‘μ²νλ μ΅λͺ λ΄λΆ ν΄λμ€μ μμ΄λ€.
public class OuterClass {
private String outerField = "Outer Field";
public void method() {
final String localVariable = "Local Variable";
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println(outerField); // μΈμ€ν΄μ€ λ³μ μΊ‘μ²
System.out.println(localVariable); // λ‘컬 λ³μ μΊ‘μ²
}
};
new Thread(r).start();
}
}
- μΈμ€ν΄μ€ λ³μ μΊ‘μ²: outerFieldλ OuterClassμ μΈμ€ν΄μ€ λ³μμ΄λ€. μ΅λͺ λ΄λΆ ν΄λμ€λ μ΄ λ³μλ₯Ό μΊ‘μ²νμ¬, run λ©μλ λ΄μμ μ¬μ©ν μ μλ€.
- λ‘컬 λ³μ μΊ‘μ²: localVariableμ method λ΄μμ μ μΈλ λ‘컬 λ³μμ΄λ€. μ΄ λ³μλ μ΅λͺ λ΄λΆ ν΄λμ€μ run λ©μλ λ΄μμ μ¬μ©λλ©°, μΊ‘μ²λλ€.
μΊ‘μ²μ λ΄λΆ μλ
1. μΊ‘μ²λ λ³μμ μ μ₯
- μ΅λͺ λ΄λΆ ν΄λμ€μ μΈμ€ν΄μ€κ° μμ±λ λ, μΊ‘μ²λ λ³μλ€μ ν΄λΉ ν΄λμ€μ μΈμ€ν΄μ€μ μ μ₯λλ€. μ΄λ λ³μμ κ°μ μ μ§νκ³ , μ΅λͺ λ΄λΆ ν΄λμ€μ λ©μλκ° μ΄λ₯Ό μ°Έμ‘°ν μ μλλ‘ νλ€.
2. ν΄λ‘μ μ λμ
- μ΅λͺ λ΄λΆ ν΄λμ€κ° λ©μλ λ΄μμ μ¬μ©λ λ, μΈλΆ ν΄λμ€μ μνλ₯Ό ν΄λ‘μ μ²λΌ μ μ§νλ€. ν΄λ‘μ λ ν¨μκ° μ μλ νκ²½μ μνλ₯Ό μ μ§νλ κΈ°λ₯μ μλ―Ένλ©°, μ΅λͺ λ΄λΆ ν΄λμ€λ μ΄ κ°λ μ νμ©νμ¬ λ³μμ μνλ₯Ό μΊ‘μ²νλ€.
μμ½
- λ³μ μΊ‘μ²: μ΅λͺ λ΄λΆ ν΄λμ€λ μΈλΆ ν΄λμ€μ μΈμ€ν΄μ€ λ³μμ λ©μλ λ΄μ λ‘컬 λ³μλ₯Ό μΊ‘μ²νμ¬, μ΅λͺ λ΄λΆ ν΄λμ€μ μΈμ€ν΄μ€κ° μμ±λ μμ μ μνλ₯Ό μ μ§νλ€. μΊ‘μ²λ λ³μλ μΈμ€ν΄μ€μ ν¨κ» μ μ₯λλ©°, final λλ effectively finalμ΄μ΄μΌ νλ€.
- λ©μλ μΊ‘μ²: λ©μλ λ΄μμ μ μΈλ λ³μ(λ‘컬 λ³μ)λ€λ μ΅λͺ λ΄λΆ ν΄λμ€μμ μ¬μ©ν μ μμΌλ©°, μ΄λ¬ν λ³μλ€λ μΊ‘μ²λλ€. λ©μλ μΊ‘μ²λ λ³μ μΊ‘μ²μ νμ κ°λ μ΄λ€.
μ΅λͺ λ΄λΆ ν΄λμ€μ μΊ‘μ² κΈ°λ₯μ μΈλΆ ν΄λμ€μ μνλ₯Ό μ μ§νλ©΄μ κ°νΈνκ² μ½λλ₯Ό μμ±ν μ μκ² ν΄μ€λ€. μ΄λ μ½λ°±, μ΄λ²€νΈ νΈλ€λ¬ λ±μμ λ§€μ° μ μ©νλ€.
ChatGPT κΈμ μΆμ²
μ΅λͺ λ΄λΆ ν΄λμ€μ λ³μμ λ©μλ μΊ‘μ²μ κ΄ν μ€λͺ μ μλ°μ 곡μ λ¬Έμ λ° μ¬λ¬ κΆμ μλ μλ£μμ νμΈν μ μμ΅λλ€. λ€μμ μ΄ μ£Όμ μ κ΄λ ¨λ μ£Όμ μΆμ²μ λλ€:
- Oracle Java Documentation:
- Java Language Specification (JLS): μλ° μΈμ΄ μ¬μμμ μ΅λͺ λ΄λΆ ν΄λμ€μ κ΄λ ¨λ κ°λ , νΉν λ³μμ λ©μλ μΊ‘μ²μ λν 곡μμ μΈ μ€λͺ μ μ 곡ν©λλ€.
- Java Tutorials by Oracle:
- Anonymous Classes: μλ° νν 리μΌμμ μ΅λͺ λ΄λΆ ν΄λμ€μ μ¬μ©λ²κ³Ό λ³μ μΊ‘μ²μ λν΄ μ€λͺ ν©λλ€.
- Effective Java (by Joshua Bloch):
- μ΄ μ± μ μλ° νλ‘κ·Έλλ°μμ κΆμ₯λλ κΈ°λ²κ³Ό μ€κ³λ₯Ό λ€λ£¨λ©°, μ΅λͺ λ΄λΆ ν΄λμ€μ κ΄λ ¨λ λ΄μ©λ μ€λͺ νκ³ μμ΅λλ€. μ΅λͺ λ΄λΆ ν΄λμ€μ μΊ‘μ²μ κ΄λ ¨λ μ€μ©μ μΈ μ‘°μΈμ μ 곡ν©λλ€.
- Java Concurrency in Practice (by Brian Goetz):
- μλ°μμμ λμμ±κ³Ό κ΄λ ¨λ λ€μν μ£Όμ λ₯Ό λ€λ£¨λ©°, μ΅λͺ λ΄λΆ ν΄λμ€μ μ¬μ©κ³Ό μΊ‘μ² κ°λ μ΄ λμμ± λ¬Έμ μ λ―ΈμΉλ μν₯μ μ€λͺ ν©λλ€.
μ΄ μλ£λ€μ μ΅λͺ λ΄λΆ ν΄λμ€μ κ΄λ ¨λ λ©λͺ¨λ¦¬ μΊ‘μ², λ³μμ λ©μλμ μ°Έμ‘° λ°©μμ λν μ¬λ μλ μ΄ν΄λ₯Ό λλ λ° μ μ©ν©λλ€.
'λΉ κ΅¬λ© μ±μ°κΈ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] Local classμ λ©λͺ¨λ¦¬ λ‘λ λ° μμ± (0) | 2024.08.19 |
---|---|
[Java] Anonymouse classμ λ©λͺ¨λ¦¬ λ‘λ λ° μμ± (0) | 2024.08.19 |
[μ©μ΄][Java] ν΄λ‘μ (Closure) (0) | 2024.08.19 |
[Java] μμ νμ κ³Ό Wrapper ν΄λμ€κ° μλ μ΄μ (0) | 2024.08.19 |
[Java][JVM] κ°λΉμ§ 컬λ μ Garbage Collection (0) | 2024.08.19 |