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

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

[Java] Local class의 λ©”λͺ¨λ¦¬ λ‘œλ“œ 및 생성

좜처

ChatGPT


둜컬 클래슀(Local Class)λŠ” λ©”μ†Œλ“œ 내뢀에 μ •μ˜λœ ν΄λž˜μŠ€μ΄λ‹€. 둜컬 ν΄λž˜μŠ€λŠ” λ©”μ†Œλ“œ λ‚΄μ—μ„œλ§Œ μ‚¬μš©λ˜λ©°, κ·Έ λ©”μ†Œλ“œμ˜ μŠ€μ½”ν”„μ— μ œν•œλœλ‹€. 이 ν΄λž˜μŠ€λŠ” λ©”μ†Œλ“œκ°€ 호좜될 λ•Œλ§ˆλ‹€ μƒˆλ‘­κ²Œ μƒμ„±λ˜λ©°, λ©”μ†Œλ“œ 호좜이 λλ‚˜λ©΄ μ†Œλ©Έλœλ‹€.

 

둜컬 클래슀의 λ©”λͺ¨λ¦¬ λ‘œλ“œ 및 생성 κ³Όμ •

1. 둜컬 클래슀의 μ •μ˜ 및 생성

둜컬 ν΄λž˜μŠ€λŠ” λ©”μ†Œλ“œ λ‚΄μ—μ„œ μ •μ˜λœλ‹€. λ©”μ†Œλ“œκ°€ 호좜될 λ•Œ 둜컬 클래슀의 μ •μ˜κ°€ λ©”λͺ¨λ¦¬μ— λ‘œλ“œλœλ‹€. μ΄λ•Œ 둜컬 ν΄λž˜μŠ€λŠ” λ©”μ†Œλ“œμ˜ μŠ€μ½”ν”„μ™€ ν•¨κ»˜ λ©”λͺ¨λ¦¬μ— λ‘œλ“œλ˜λ©°, λ©”μ†Œλ“œ 호좜이 λλ‚˜λ©΄ λ©”λͺ¨λ¦¬μ—μ„œ ν•΄μ œλœλ‹€.

 

2. 클래슀 λ‘œλ”© (클래슀 레벨)

  • 둜컬 ν΄λž˜μŠ€λŠ” λ©”μ†Œλ“œμ˜ 둜컬 μŠ€μ½”ν”„ λ‚΄μ—μ„œ μ •μ˜λ˜κΈ° λ•Œλ¬Έμ—, λ©”μ†Œλ“œκ°€ 호좜될 λ•Œλ§ˆλ‹€ 둜컬 클래슀의 Class 객체가 λ©”λͺ¨λ¦¬μ— λ‘œλ“œλœλ‹€. 이 Class κ°μ²΄λŠ” λ©”μ†Œλ“œμ˜ μŠ€νƒ ν”„λ ˆμž„μ— μ €μž₯λœλ‹€.
  • 둜컬 ν΄λž˜μŠ€λŠ” λ©”μ†Œλ“œ μ˜μ—­μ—μ„œ λ‘œλ“œλ˜μ§€ μ•ŠλŠ”λ‹€. λŒ€μ‹ , λ©”μ†Œλ“œκ°€ 호좜될 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ 둜컬 클래슀 μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λœλ‹€. 이 클래슀의 λ©”νƒ€λ°μ΄ν„°λŠ” λ©”μ†Œλ“œμ˜ μŠ€νƒ ν”„λ ˆμž„κ³Ό μ—°κ²°λœλ‹€.

3. μΈμŠ€ν„΄μŠ€ 생성 (μΈμŠ€ν„΄μŠ€ 레벨)

  • 둜컬 클래슀의 μΈμŠ€ν„΄μŠ€λŠ” λ©”μ†Œλ“œκ°€ 싀행될 λ•Œ μƒμ„±λœλ‹€. 둜컬 클래슀의 μΈμŠ€ν„΄μŠ€λŠ” 일반적인 μžλ°” 객체와 λ§ˆμ°¬κ°€μ§€λ‘œ νž™ μ˜μ—­μ— μ €μž₯λœλ‹€. νž™ μ˜μ—­μ€ 객체λ₯Ό μ €μž₯ν•˜λŠ” λ©”λͺ¨λ¦¬ κ³΅κ°„μœΌλ‘œ, 클래슀의 μΈμŠ€ν„΄μŠ€μ™€ κ΄€λ ¨λœ 데이터(예: ν•„λ“œ κ°’, λ©”μ†Œλ“œ μ°Έμ‘° λ“±)λ₯Ό μ €μž₯ν•œλ‹€.

4. λ©”μ†Œλ“œ μŠ€νƒ ν”„λ ˆμž„μ— λ©”μ†Œλ“œ 호좜 정보 μ €μž₯ (μΈμŠ€ν„΄μŠ€ 레벨)

  • λ©”μ†Œλ“œμ˜ μŠ€νƒ ν”„λ ˆμž„μ—λŠ” λ©”μ†Œλ“œ ν˜ΈμΆœμ— λŒ€ν•œ 정보λ₯Ό μ €μž₯ν•œλ‹€. 이 μ •λ³΄μ—λŠ” 둜컬 λ³€μˆ˜, λ©”μ†Œλ“œ 호좜 μŠ€νƒ, 그리고 둜컬 클래슀의 μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ μ°Έμ‘°κ°€ 포함될 수 μžˆλ‹€. 즉, 둜컬 클래슀의 μΈμŠ€ν„΄μŠ€ μžμ²΄λŠ” νž™μ— μ €μž₯λ˜μ§€λ§Œ, κ·Έ μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ μ°Έμ‘°λŠ” λ©”μ†Œλ“œμ˜ μŠ€νƒ ν”„λ ˆμž„μ— μ €μž₯λœλ‹€.

 

μ˜ˆμ‹œ

public class OuterClass {
    private String outerField = "Outer Field";

    public void outerMethod() {
        final String localVariable = "Local Variable";

        class LocalClass {
            void printValues() {
                System.out.println(outerField); // 캑처된 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
                System.out.println(localVariable); // 캑처된 둜컬 λ³€μˆ˜
            }
        }

        LocalClass localClassInstance = new LocalClass();
        localClassInstance.printValues();
    }
}

 

 

  • 둜컬 클래슀 μ •μ˜: LocalClassλŠ” outerMethod λ‚΄μ—μ„œ μ •μ˜λœλ‹€.
  • 클래슀 λ‘œλ”©: outerMethod 호좜 μ‹œ, LocalClass의 Class 객체가 λ©”λͺ¨λ¦¬μ— λ‘œλ“œλœλ‹€.
  • μΈμŠ€ν„΄μŠ€ν™”: LocalClass의 μΈμŠ€ν„΄μŠ€κ°€ λ©”μ†Œλ“œ μ‹€ν–‰ λ™μ•ˆ μƒμ„±λœλ‹€.

 


 

ChatGPT κΈ€μ˜ 좜처

좜처

클래슀 μ •μ˜μ™€ λ‘œλ”©μ— κ΄€ν•œ κ°œλ…μ€ λ‹€μŒ μžλ£Œλ“€μ—μ„œ μžμ„Ένžˆ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€:

  1. Oracle Java Documentation:
    • Java Language Specification (JLS): 클래슀의 μ •μ˜μ™€ λ©”λͺ¨λ¦¬ 관리에 λŒ€ν•œ 곡식적인 μ„€λͺ…이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
    • Class Loading: μžλ°” 클래슀 λ‘œλ”©μ˜ 원리와 과정에 λŒ€ν•œ μ„€λͺ…이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  2. Effective Java (by Joshua Bloch):
    • μžλ°”μ˜ ν΄λž˜μŠ€μ™€ λ©”λͺ¨λ¦¬ ꡬ쑰에 λŒ€ν•œ 심도 μžˆλŠ” μ„€λͺ…을 μ œκ³΅ν•˜λ©°, 둜컬 ν΄λž˜μŠ€μ™€ κ΄€λ ¨λœ κ°œλ…λ„ λ‹€λ£Ήλ‹ˆλ‹€.

이 μžλ£Œλ“€μ€ μžλ°”μ—μ„œμ˜ 클래슀 μ •μ˜ 및 λ‘œλ”© 과정에 λŒ€ν•΄ 깊이 μ΄ν•΄ν•˜λŠ” 데 도움을 쀄 κ²ƒμž…λ‹ˆλ‹€.