JAVA/포스팅

자바 내부 클래스(inner class)

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

자바의 내부 클래스(Inner Class)는 다른 클래스 내에 선언된 클래스를 의미합니다. 내부 클래스는 외부 클래스의 멤버 변수 및 메서드에 쉽게 접근할 수 있으며, 코드를 논리적으로 구조화하고 캡슐화하는 데 도움을 줍니다. 다양한 종류의 내부 클래스가 있습니다.

 

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

멤버 내부 클래스는 다른 멤버 변수와 마찬가지로 외부 클래스의 멤버로 선언되는 클래스입니다. 멤버 내부 클래스는 다른 클래스에서도 사용할 수 있습니다.

class OuterClass {
    private int outerVar;

    class InnerClass {
        void innerMethod() {
            outerVar = 10; // 외부 클래스의 멤버 변수에 접근 가능
        }
    }
}

 

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

정적 내부 클래스는 static 키워드로 선언되며, 외부 클래스의 인스턴스에 종속되지 않습니다. 외부 클래스의 정적 멤버 변수와 메서드에 접근할 수 있습니다.

class OuterClass {
    private static int staticVar;

    static class StaticInnerClass {
        void staticInnerMethod() {
            staticVar = 20; // 외부 클래스의 정적 멤버 변수에 접근 가능
        }
    }
}

 

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

지역 내부 클래스는 메서드나 초기화 블록 안에서 선언되며, 해당 블록 내에서만 유효합니다. 주로 해당 블록 내부에서만 사용되는 클래스를 정의할 때 사용됩니다.

class OuterClass {
    void outerMethod() {
        int localVar = 30;

        class LocalInnerClass {
            void localInnerMethod() {
                System.out.println(localVar); // 외부 메서드의 지역 변수에 접근 가능
            }
        }

        LocalInnerClass localInner = new LocalInnerClass();
        localInner.localInnerMethod();
    }
}

 

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

익명 내부 클래스는 이름이 없는 클래스로, 주로 인터페이스나 추상 클래스의 인스턴스를 생성할 때 사용됩니다. 한 번만 사용될 클래스를 간편하게 정의할 수 있습니다.

interface MyInterface {
    void myMethod();
}

class OuterClass {
    void outerMethod() {
        MyInterface myInterface = new MyInterface() {
            @Override
            public void myMethod() {
                System.out.println("Implementation of myMethod");
            }
        };

        myInterface.myMethod();
    }
}

내부 클래스는 주로 코드의 가독성을 높이고 캡슐화를 강화하기 위해 사용됩니다. 하지만, 남용하면 코드의 복잡성을 증가시킬 수 있으므로 신중하게 사용해야 합니다.

 

With ChatGPT

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

자바 내부 클래스의 선언  (0) 2023.11.13
자바 내부 클래스의 특징  (0) 2023.11.13
자바 인터페이스의 이해  (0) 2023.11.13
자바 인터페이스의 장점  (0) 2023.11.13
자바 인터페이스를 이용한 다형성  (0) 2023.11.13