JAVA

지역 내부 클래스와 익명 내부 클래스

jiyoon12 2025. 4. 27. 22:12
  • 지역 내부 클래스(Local Inner Class): 메서드 내부에 선언되며, 선언된 메서드 내에서만 사용된다.
  • 지역 내부 클래스는 해당 메서드의 지역 변수와 마찬가지로 스코프가 제한된다.
package inner;

/**
 * 지역 내부 클래스(Local Inner Class)
 * 메서드 안에 클래스가 있는 형태
 */
public class OuterClass2 {

    public void display() {

        // 지역 내부 클래스
        class LocalInnerClass {
            void printMessage() {
                System.out.println("안녕 나는 지역 내부 클래스 메서드야~");
            }
        }

        // LocalInnerClass 생성
        LocalInnerClass inner = new LocalInnerClass();
        inner.printMessage();

    } // end og method - display()

    public static void main(String[] args) {
        
        OuterClass2 outerClass2 = new OuterClass2();
        outerClass2.display();
    }
}

  • 익명 내부 클래스(Anonymous Inner Class): 이름이 없는 내부 클래스로, 주로 인터페이스나 추상 클래스를 간편하게 구현할 때 사용된다.
  • 익명 내부 클래스는 오직 하나의 인스턴스만 생성할 수 있으며, 주로 이벤트 처리나 콜백 구현에 사용된다.
package inner;

/**
 * 익명 내부 클래스란?
 * 익명(익명 이란? 이름이 없다)
 */
public class OuterClass3 {

    // Runnable runnable; // 인터페이스
    // 인터페이스는 기본적으로 인스턴스화 할 수 없다.
    // 하지만 익명 내부 클래스로 구현 할 수 있다.

    public OuterClass3() {

        // 1. 구현부를 만들어 준다.
        // 2. 추상 메서드를 구현 메서드로 변경해 준다.
        new Runnable() {
            @Override
            public void run() {

            }
        };
    }
    
    public static void main(String[] args) {

        // 익명 클래스란 이름이 없는 클래스이다.
        new OuterClass3(); // 익명 클래스

    }
}