μΆμ²
ChatGPT
ν΄λ‘μ (Closure)λ νλ‘κ·Έλλ°μμ ν¨μμ ν΄λΉ ν¨μκ° μ μλ νκ²½(μ€μ½ν) μ¬μ΄μ κ΄κ³λ₯Ό μλ―Ένλ€. ν΄λ‘μ λ ν¨μκ° μμ μ μ μ λΉμμ λ³μμ μνλ₯Ό κΈ°μ΅νκ³ μ¬μ©ν μ μλλ‘ ν΄μ£Όλ κΈ°λ₯μ΄λ€. μ΄ κ°λ μ μ£Όλ‘ ν¨μν νλ‘κ·Έλλ° μΈμ΄μμ μ¬μ©λμ§λ§, μλ°λ₯Ό ν¬ν¨ν κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° μΈμ΄μμλ μ¬μ©ν μ μλ€.
ν΄λ‘μ μ κ°λ
ν΄λ‘μ λ κΈ°λ³Έμ μΌλ‘ ν¨μμ κ·Έ ν¨μκ° μ μλ νκ²½μ ν¨κ» μΊ‘μννλ€. ν΄λ‘μ λ λ€μκ³Ό κ°μ νΉμ§μ κ°μ§κ³ μλ€.
1. ν¨μμ μνμ κ²°ν©
ν΄λ‘μ λ ν¨μκ° μ μλ νκ²½μ λ³μμ μνλ₯Ό κΈ°μ΅νλ€. μ¦, ν¨μκ° μΈλΆ νκ²½μ λ³μμ μ κ·Όν μ μμΌλ©°, μ΄ λ³μλ€μ κ°μ μ§μμ μΌλ‘ μ μ§νλ€.
2. μ€μ½ν μ μ§
ν΄λ‘μ λ ν¨μκ° μ μλ μ€μ½νμ λ³μλ€μ μ°Έμ‘°ν μ μλ€. μ΄λ ν¨μκ° μ€νλ λ, μ μλ λΉμμ λ³μ κ°μ μ¬μ©ν μ μκ² νλ€.
3. μν μ μ§
ν΄λ‘μ λ ν¨μ μ€ν νμλ λ³μμ μνλ₯Ό μ μ§ν μ μλ€. μ΄λ ν¨μκ° νΈμΆλ λλ§λ€ λ³μμ μνλ₯Ό λ³κ²½ν μ μκ² ν΄μ€λ€.
μλ°μμμ ν΄λ‘μ
μλ°μμλ ν΄λ‘μ κ°λ μ΄ μ£Όλ‘ μ΅λͺ λ΄λΆ ν΄λμ€μ λλ€ ννμμΌλ‘ ꡬνλλ€. λ€μμ μλ°μμ ν΄λ‘μ λ₯Ό νμ©νλ λ°©λ²μ΄λ€.
1. μ΅λͺ λ΄λΆ ν΄λμ€(Anonymous Inner Class)
μ΅λͺ λ΄λΆ ν΄λμ€λ μΈλΆ ν΄λμ€μ λ³μμ λ©μλμ μ κ·Όν μ μμΌλ©°, μ΄ λ³μμ λ©μλμ κ°μ μΊ‘μ²ν μ μλ€.
public class Outer {
private String message = "Hello";
public void showMessage() {
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println(message); // μΊ‘μ²λ λ³μ
}
};
new Thread(r).start();
}
}
μ΄ μμ μμ, μ΅λͺ λ΄λΆ ν΄λμ€λ Outer ν΄λμ€μ μΈμ€ν΄μ€ λ³μ messageλ₯Ό μΊ‘μ²νλ€. messageλ μ΅λͺ λ΄λΆ ν΄λμ€μ run λ©μλμμ μ¬μ©λλ€.
2. λλ€ ννμ(Lambda Expressions)
μλ° 8λΆν° λλ€ ννμμ ν¨μν νλ‘κ·Έλλ° μ€νμΌμ μ§μνλ©°, ν΄λ‘μ μ κ°λ μ κ°νΈνκ² μ¬μ©ν μ μλλ‘ ν΄μ€λ€. λλ€ ννμμ μΈλΆ μ€μ½νμ λ³μμ μ κ·Όν μ μμΌλ©°, μ΄λ¬ν λ³μλ€μ μΊ‘μ²λλ€.
public class Example {
public static void main(String[] args) {
String greeting = "Hello";
Runnable r = () -> System.out.println(greeting); // μΊ‘μ²λ λ³μ
r.run();
}
}
μ΄ μμ μμ, λλ€ ννμμ greeting λ³μλ₯Ό μΊ‘μ²νμ¬ System.out.printlnμμ μ¬μ©νλ€.
ν΄λ‘μ μ μ₯μ
1. μν μ μ§
- ν΄λ‘μ λ ν¨μκ° μμ±λ νκ²½μ μνλ₯Ό μ μ§ν μ μκΈ° λλ¬Έμ, μνλ₯Ό μΆμ νκ³ κ΄λ¦¬νλ λ° μ μ©νλ€.
2. μ½λμ μ¬μ¬μ©μ±
- ν΄λ‘μ λ₯Ό μ¬μ©νλ©΄, ν¨μμ κ·Έ ν¨μκ° μ μλ νκ²½μ ν¨κ» μΊ‘μννμ¬ μ¬μ¬μ© κ°λ₯ν μ½λ λΈλ‘μ λ§λ€ μ μλ€.
3. κ°κ²°ν μ½λ μμ±
- ν΄λ‘μ λ₯Ό μ¬μ©νλ©΄, μνλ₯Ό μ μ§νλ ν¨μλ₯Ό κ°κ²°νκ² μμ±ν μ μμΌλ©°, νΉν ν¨μν νλ‘κ·Έλλ° μ€νμΌμ μ₯μ μ νμ©ν μ μλ€.
μμ½
- ν΄λ‘μ (Closure)λ ν¨μμ ν΄λΉ ν¨μκ° μ μλ νκ²½μ λ³μμ μνλ₯Ό ν¨κ» μΊ‘μννλ κ°λ μ΄λ€.
- μλ°μμ ν΄λ‘μ λ μ΅λͺ λ΄λΆ ν΄λμ€μ λλ€ ννμμ ν΅ν΄ ꡬνλλ©°, μΈλΆ ν΄λμ€μ λ³μμ λ©μλλ₯Ό μΊ‘μ²νκ³ μ¬μ©ν μ μκ² ν΄μ€λ€.
- μ₯μ : ν΄λ‘μ λ μν μ μ§, μ½λ μ¬μ¬μ©μ±, κ°κ²°ν μ½λ μμ±μ κ°λ₯νκ² νλ€.
μ΄λ¬ν κ°λ μ μ£Όλ‘ ν¨μν νλ‘κ·Έλλ°μμ λ§μ΄ μ¬μ©λμ§λ§, μλ°μ κ°μ κ°μ²΄ μ§ν₯ μΈμ΄μμλ μ μ©νκ² νμ©λ μ μλ€.
ChatGPT κΈμ μΆμ²
ν΄λ‘μ (Closure) κ°λ κ³Ό μλ°μμμ ν΄λ‘μ ꡬν λ°©λ²μ λν μ€λͺ μ λ€μκ³Ό κ°μ μλ£λ€μμ νμΈν μ μμ΅λλ€:
- Oracle Java Documentation:
- Java Language Specification (JLS): μλ° μΈμ΄ μ¬μμμλ μλ°μ μ΅λͺ λ΄λΆ ν΄λμ€μ λλ€ ννμμ λν μ μλ₯Ό ν¬ν¨νκ³ μμ΅λλ€. ν΄λ‘μ μ κ΄λ ¨λ κ°λ μ΄ μλ°μμ μ΄λ»κ² μ μ©λλμ§μ λν κΈ°λ³Έμ μΈ μ 보λ₯Ό μ 곡ν©λλ€.
- Java Tutorials by Oracle:
- Lambda Expressions: μλ°μ λλ€ ννμμ λν 곡μ νν 리μΌλ‘, ν΄λ‘μ μ κ΄λ ¨λ κ°λ μ μ€λͺ ν©λλ€. λλ€ ννμμ΄ μ΄λ»κ² ν΄λ‘μ λ₯Ό ꡬννλμ§μ λν΄ μμΈν μ€λͺ ν©λλ€.
- Anonymous Classes: μ΅λͺ λ΄λΆ ν΄λμ€μ λν μ€λͺ μ μ 곡νλ©°, ν΄λ‘μ μ κ°λ μ μ΄ν΄νλ λ° λμμ΄ λ©λλ€.
- Effective Java (by Joshua Bloch):
- μ΄ μ± μ μλ°μ λ€μν κΈ°λ²κ³Ό μ€κ³λ₯Ό λ€λ£¨λ©°, μ΅λͺ λ΄λΆ ν΄λμ€μ λλ€ ννμμ ν΅ν ν΄λ‘μ κ°λ μ μ€λͺ ν©λλ€. μλ°μμ ν΄λ‘μ λ₯Ό μ¬μ©νλ λ°©λ²μ λν μ€μ©μ μΈ μ‘°μΈμ μ 곡ν©λλ€.
- Java Concurrency in Practice (by Brian Goetz):
- μλ°μμμ λμμ±κ³Ό κ΄λ ¨λ λ€μν μ£Όμ λ₯Ό λ€λ£¨λ©°, μ΅λͺ λ΄λΆ ν΄λμ€μ ν΄λ‘μ κ°λ μ΄ λμμ± λ¬Έμ μ λ―ΈμΉλ μν₯μ μ€λͺ ν©λλ€.
μ΄ μλ£λ€μ μλ°μμ ν΄λ‘μ μ κ°λ κ³Ό μ¬μ© λ°©λ²μ μ΄ν΄νλ λ° λμμ΄ λ©λλ€. 곡μ λ¬Έμμ μ± λ€μ ν΄λ‘μ μ μ΄λ‘ μ λ°°κ²½κ³Ό μ€μ μ μ© λ°©λ²μ κΉμ΄ μκ² μ€λͺ ν©λλ€.
'λΉ κ΅¬λ© μ±μ°κΈ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] Anonymouse classμ λ©λͺ¨λ¦¬ λ‘λ λ° μμ± (0) | 2024.08.19 |
---|---|
[Java] "λ³μμ λ©μλλ₯Ό μΊ‘μ²νλ€" μλ―Έ (0) | 2024.08.19 |
[Java] μμ νμ κ³Ό Wrapper ν΄λμ€κ° μλ μ΄μ (0) | 2024.08.19 |
[Java][JVM] κ°λΉμ§ 컬λ μ Garbage Collection (0) | 2024.08.19 |
[JVM][GC] λ©λͺ¨λ¦¬ λ¨νΈν (0) | 2024.08.19 |