본문 바로가기
IT/java

자바(Java) 내부 클래스

by 뉴코딩맨 2023. 6. 22.
Java는 객체 지향 프로그래밍 언어로, 클래스를 정의하고 사용하여 프로그램을 구성합니다. Java 내부 클래스는 클래스 내부에서 정의되는 클래스로, 다른 클래스의 멤버로 포함될 수 있습니다. Java의 내부 클래스에 대해 자세히 알아보고, 사용 방법과 예시를 알아보겠습니다.

 

 

내부 클래스의 종류

Java 내부 클래스는 다음과 같이 여러 종류로 나뉠 수 있습니다.
 

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

인스턴스 내부 클래스는 외부 클래스의 인스턴스와 연결되어 있으며, 인스턴스 변수 및 메소드에 접근할 수 있습니다. 인스턴스 내부 클래스는 다른 클래스의 멤버로 선언되며, 해당 외부 클래스의 인스턴스를 통해 생성됩니다.
 

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

정적 내부 클래스는 외부 클래스와 연결되어 있지 않으며, 외부 클래스의 정적 멤버와 동일한 접근 권한을 가집니다. 정적 내부 클래스는 static 키워드를 사용하여 선언되며, 외부 클래스의 인스턴스를 생성하지 않고도 사용할 수 있습니다.

 

 

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

지역 내부 클래스는 메소드나 코드 블록 내에서 정의되는 클래스로, 해당 블록 내에서만 유효합니다. 주로 메소드 내부에서 임시적인 클래스가 필요한 경우에 사용됩니다.
 

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

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

사용 방법

Java 내부 클래스를 사용하는 방법은 다음과 같습니다.
 
public class OuterClass {

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

    // 정적 내부 클래스
    static class StaticInnerClass {
    // 정적 내부 클래스 멤버
    }

    public void someMethod() {
        // 지역 내부 클래스
        class LocalInnerClass {
        // 지역 내부 클래스 멤버
        }

        // 익명 내부 클래스
        SomeInterface anonymousInnerClass = new SomeInterface() {
        // 익명 내부 클래스 멤버
        };
    }
}
 
위의 예시에서는 OuterClass라는 외부 클래스 내에 인스턴스 내부 클래스, 정적 내부 클래스, 지역 내부 클래스, 익명 내부 클래스를 정의하고 있습니다. 각 내부 클래스는 해당하는 범위에서 사용되며, 멤버 변수와 메소드를 가질 수 있습니다.
 
 

예시

다음은 인스턴스 내부 클래스의 예시입니다.
 
public class OuterClass {
    private int outerValue = 10;

    class InnerClass {
        private int innerValue = 20;

        public void displayValues() {
            System.out.println("Outer value: " + outerValue);
            System.out.println("Inner value: " + innerValue);
        }
    }

    public void execute() {
        InnerClass inner = new InnerClass();
        inner.displayValues();
    }
}

public class Main {
    public static void main(String[] args) {
        OuterClass outer = new OuterClass();
        outer.execute();
    }
}
 
위의 예시에서는 OuterClass 내에 InnerClass를 정의하고 있습니다. InnerClass는 OuterClass의 인스턴스 변수인 outerValue와 자체 인스턴스 변수인 innerValue에 접근할 수 있습니다. execute 메소드에서는 InnerClass의 인스턴스를 생성하고 displayValues 메소드를 호출하여 내부 클래스의 멤버 값을 출력합니다.
 
 

결론

Java 내부 클래스는 클래스 내에서 정의되는 중첩 클래스로, 다른 클래스의 멤버로 포함될 수 있습니다. 인스턴스 내부 클래스, 정적 내부 클래스, 지역 내부 클래스, 익명 내부 클래스와 같은 다양한 종류의 내부 클래스를 활용하여 코드를 모듈화하고, 특정 범위에서만 유효한 클래스를 정의할 수 있습니다. 내부 클래스를 사용하여 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다.
 

댓글