본문 바로가기

LANGUAGE/Java

내부 클래스(Inner Class)

내부 클래스란?

클래스 내에 선언된 클래스다. 클래스에 다른 클래스를 선언하는 이유는 두 클래스가 밀접하게 연관되어 있기 때문이다. 내부 클래스는 외부 클래스의 멤버로 간주되며, 외부 클래스 멤버에 접근할 수 있다. 아래와 같은 형태로 선언될 수 있다.

class OuterClass {
    // 외부 클래스 멤버

    class InnerClass {
        // 내부 클래스 멤버
    }
}

내부 클래스를 사용하는 이유

  1. 내부 클래스에서 외부 클래스의 멤버에 손쉽게 접근할 수 있다. → 코드의 복잡성을 줄일 수 있다.

  2. 서로 관련 있는 클래스를 논리적으로 묶어서 표현함으로써, 캡슐화를 증가시키고, 코드의 복잡성을 낮출 수 있다.

  3. 외부에서는 내부 클래스에 접근할 수 없으므로, 코드의 보안성을 높일 수 있다.

내부 클래스의 종류

1. 인스턴스 내부 클래스(Instance Inner Class)

외부 클래스의 인스턴스가 생성된 후에만 내부 클래스의 인스턴스를 생성할 수 있다. 인스턴스 내부 클래스는 외부 클래스의 인스턴스 멤버에 접근할 수 있다.

class OuterClass {
    private int x;

    class InnerClass {
        public void display() {
            System.out.println(x); // 외부 클래스의 인스턴스 멤버에 접근
        }
    }
}

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

내부 클래스가 static 으로 선언되면, 외부 클래스의 인스턴스 없이도 내부 클래스의 인스턴스를 생성할 수 있다. 정적 내부 클래스는 외부 클래스의 정적 멤버에만 접근할 수 있다.

class OuterClass {
    private static int x;

    static class InnerClass {
        public void display() {
            System.out.println(x); // 외부 클래스의 정적 멤버에 접근
        }
    }
}

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

메서드나 초기화 블록 내에 정의되는 내부 클래스이다. 지역 내부 클래스는 해당 블록 내에서만 유효하며, 외부 클래스의 멤버에 접근할 수 있다.

class OuterClass {
    public void outerMethod() {
        int x = 10;

        class InnerClass {
            public void display() {
                System.out.println(x); // 외부 클래스의 지역 변수에 접근
            }
        }
    }
}

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

이름이 없는 내부 클래스로, 주로 인터페이스의 구현이나 추상 클래스의 확장을 위해 사용된다. 익명 내부 클래스는 클래스 정의와 동시에 인스턴스를 생성한다.

interface MyInterface {
    void display();
}

class OuterClass {
    public void outerMethod() {
        MyInterface innerClass = new MyInterface() {
            public void display() {
                System.out.println("Anonymous Inner Class");
            }
        };
        innerClass.display();
    }
}

'LANGUAGE > Java' 카테고리의 다른 글

Static  (0) 2024.05.16