JAVA/포스팅

자바 내부 클래스의 접근성

짜집퍼박사(짜박) 2023. 11. 13. 00:52

자바의 내부 클래스의 접근성은 외부 클래스와 내부 클래스 간의 관계에 따라 다양합니다. 내부 클래스에 적용할 수 있는 접근 제어자는 멤버 내부 클래스, 정적 내부 클래스, 지역 내부 클래스, 익명 내부 클래스에 대해 각각 다릅니다.

 

1. 멤버 내부 클래스 (Member Inner Class)

- 외부 클래스의 인스턴스에 종속적이므로 외부 클래스의 멤버와 동일한 접근성을 가집니다.
- public, protected, default (package-private), private 등의 접근 제어자 사용 가능.

public class Outer {
    private int outerField;

    public class Inner {
        // 멤버 내부 클래스는 외부 클래스의 private 멤버에도 접근 가능
        public void accessOuterField() {
            System.out.println(outerField);
        }
    }
}

 

2. 정적 내부 클래스 (Static Nested Class)

- 외부 클래스의 인스턴스와 독립적이므로 외부 클래스의 멤버와 상관없이 정적 내부 클래스의 접근성을 결정합니다.
- public, protected, default (package-private), private 등의 접근 제어자 사용 가능.

public class Outer {
    private static int outerStaticField;

    public static class Inner {
        // 정적 내부 클래스는 외부 클래스의 private static 멤버에도 접근 가능
        public void accessOuterStaticField() {
            System.out.println(outerStaticField);
        }
    }
}

 

3. 지역 내부 클래스 (Local Inner Class)

- 외부 클래스의 인스턴스에 종속적이며, 선언된 메서드나 코드 블록 내에서만 유효하기 때문에 해당 범위에서만 접근 가능합니다.
- 외부 클래스 멤버와 동일한 접근성을 가집니다.

public class Outer {
    private int outerField;

    public void methodWithLocalInnerClass() {
        class LocalInner {
            // 지역 내부 클래스는 외부 클래스의 private 멤버에도 접근 가능
            public void accessOuterField() {
                System.out.println(outerField);
            }
        }

        LocalInner localInner = new LocalInner();
        localInner.accessOuterField();
    }
}

 

4. 익명 내부 클래스 (Anonymous Inner Class)

- 외부 클래스의 인스턴스와 독립적이지만, 메서드 내에서 정의되기 때문에 해당 메서드의 지역 변수와 파라미터에 접근 가능합니다.
- 주로 인터페이스나 추상 클래스의 익명 구현에 사용되며, 외부 클래스 멤버와 동일한 접근성을 가집니다.

public class Outer {
    private int outerField;

    public void methodWithAnonymousInnerClass() {
        Runnable anonymousInner = new Runnable() {
            // 익명 내부 클래스는 외부 클래스의 private 멤버에도 접근 가능
            @Override
            public void run() {
                System.out.println(outerField);
            }
        };

        anonymousInner.run();
    }
}

따라서 내부 클래스의 접근성은 외부 클래스의 멤버에 따라 결정되며, 일반적으로 멤버 내부 클래스와 정적 내부 클래스는 각각 독립적이므로 동일한 접근성을 가집니다. 지역 내부 클래스와 익명 내부 클래스는 선언된 위치와 사용하는 외부 클래스 멤버에 따라 접근성이 결정됩니다.

 

With ChatGPT

'JAVA > 포스팅' 카테고리의 다른 글

자바 정적 내부 클래스  (0) 2023.11.13
자바 멤버 내부 클래스  (0) 2023.11.13
자바 내부 클래스의 선언  (0) 2023.11.13
자바 내부 클래스의 특징  (0) 2023.11.13
자바 내부 클래스(inner class)  (0) 2023.11.13