STUDY

[Java] Nested Class - 중첩클래스

simongs 2020. 5. 11. 22:32

▣ 중첩클래스란 (Nested Class)

다른 클래스 내부에 정의되는 클래스를 중첩클래스라고 한다.

▣ 중첩클래스 종류

  • 1. 스태틱 클래스(Static Class) : 독립적으로 오브젝트로 만들어질 수 있음
  • 2. 내부 클래스(Inner Class) : 자신이 정의된 클래스의 오브젝트 안에서만 만들어질 수 있음
    • 2-1. 멤버 내부 클래스 (Member Inner Class) : 멤버필드처럼 오브젝트 레벨에 정의됨
    • 2-2. 로컬 클래스 (Local Class) : 메소드 레벨에 정의됨
    • 2-3. 익명 내부 클래스 (Anonymous Inner Class) : 이름을 가지지 않음

▣ Sample Code

// Outer Class
class OuterClass {

    // 중첩클래스 Style 1) Static Class
    static class StaticNestedClass {

    }

    // 중첩클래스 Style 2-1) Member Inner Class
    class MemberInnerClass {

    }

    void method(SomeObject someObject) {
        // 선언된 메소드 내에서만 사용가능함. 자신이 선언된 곳의 정보에 접근이 가능하다.
        // 중첩클래스 Style 2-2) Local Class
        class LocalClass implements InterfaceAAA {
            public String implement() {
                return someObject.getTest();
            }
        }
        InterfaceAAA test = new LocalClass();
    }

    void anonyMethod(SomeObject someObject) {
        // 중첩클래스 Style 2-3) Anonymous Inner Class
        InterfaceAAA test = new InterfaceAAA() {
            public String implement() {
                return someObject.getTest();
            }
        }
    }
}

// 익명클래스를 위한 인터페이스 정의
interface InterfaceAAA {
    String implements();
}

▣ 부가정보 > 익명내부클래스

클래스 선언과 오브젝트 생성이 결합된 형태로 만들어지며,
상속할 클래스나 구현할 인터페이스를 생성자 대신 사용해서 다음과 같은 형태로 만들어 사용한다.
클래스를 재사용할 필요가 없고, 구현한 인터페이스 타입으로만 사용할 경우에 유용하다.