λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

빈 ꡬ멍 μ±„μš°κΈ°

[Java] "λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ₯Ό μΊ‘μ²˜ν•œλ‹€" 의미

좜처

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 κΈ€μ˜ 좜처

 

읡λͺ… λ‚΄λΆ€ 클래슀의 λ³€μˆ˜μ™€ λ©”μ†Œλ“œ μΊ‘μ²˜μ— κ΄€ν•œ μ„€λͺ…은 μžλ°”μ˜ 곡식 λ¬Έμ„œ 및 μ—¬λŸ¬ κΆŒμœ„ μžˆλŠ” μžλ£Œμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ 이 μ£Όμ œμ™€ κ΄€λ ¨λœ μ£Όμš” μΆœμ²˜μž…λ‹ˆλ‹€:

  1. Oracle Java Documentation:
    • Java Language Specification (JLS): μžλ°” μ–Έμ–΄ μ‚¬μ–‘μ—μ„œ 읡λͺ… λ‚΄λΆ€ ν΄λž˜μŠ€μ™€ κ΄€λ ¨λœ κ°œλ…, 특히 λ³€μˆ˜μ™€ λ©”μ†Œλ“œ μΊ‘μ²˜μ— λŒ€ν•œ 곡식적인 μ„€λͺ…을 μ œκ³΅ν•©λ‹ˆλ‹€.
  2. Java Tutorials by Oracle:
    • Anonymous Classes: μžλ°” νŠœν† λ¦¬μ–Όμ—μ„œ 읡λͺ… λ‚΄λΆ€ 클래슀의 μ‚¬μš©λ²•κ³Ό λ³€μˆ˜ μΊ‘μ²˜μ— λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.
  3. Effective Java (by Joshua Bloch):
    • 이 책은 μžλ°” ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ꢌμž₯λ˜λŠ” 기법과 섀계λ₯Ό 닀루며, 읡λͺ… λ‚΄λΆ€ ν΄λž˜μŠ€μ™€ κ΄€λ ¨λœ λ‚΄μš©λ„ μ„€λͺ…ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 읡λͺ… λ‚΄λΆ€ 클래슀의 μΊ‘μ²˜μ™€ κ΄€λ ¨λœ μ‹€μš©μ μΈ 쑰언을 μ œκ³΅ν•©λ‹ˆλ‹€.
  4. Java Concurrency in Practice (by Brian Goetz):
    • μžλ°”μ—μ„œμ˜ λ™μ‹œμ„±κ³Ό κ΄€λ ¨λœ λ‹€μ–‘ν•œ 주제λ₯Ό 닀루며, 읡λͺ… λ‚΄λΆ€ 클래슀의 μ‚¬μš©κ³Ό 캑처 κ°œλ…μ΄ λ™μ‹œμ„± λ¬Έμ œμ— λ―ΈμΉ˜λŠ” 영ν–₯을 μ„€λͺ…ν•©λ‹ˆλ‹€.

이 μžλ£Œλ“€μ€ 읡λͺ… λ‚΄λΆ€ ν΄λž˜μŠ€μ™€ κ΄€λ ¨λœ λ©”λͺ¨λ¦¬ 캑처, λ³€μˆ˜μ™€ λ©”μ†Œλ“œμ˜ μ°Έμ‘° 방식에 λŒ€ν•œ 심도 μžˆλŠ” 이해λ₯Ό λ•λŠ” 데 μœ μš©ν•©λ‹ˆλ‹€.