본문 바로가기

자바

자바 중첩 클래스 ( Nested Class )

1. 중첩 클래스란?

클래스 안에 정의된 다른 클래스를 의미한다. 중첩 클래스는 외부 클래스의 멤버로 간주되며, 

외부 클래스와 밀접한 관계를 가지고 있는 경우 사용된다.

 

2. 중첩 클래스의 존재 이유 :

1) 한 곳에서만 사용되는 클래스를 논리적으로 묶어서 처리하기 위해

2) 캡슐화를 통해 구현 세부 사항을 숨길 수 있다.

3) 코드의 가독성과 유지보수를 쉽게 만들 수 있다.

 

2. 중첩 클래스 종류

1) 정적 중첩 클래스 ( Static Nested Class ) :

정적 중첩 클래스는 static을 사용하여 외부 클래스 안에 정의된 클래스다.

겉으로 보기에는 유사하지만, 내부적으로 구현이 달라야 할 때 사용한다.

public class OuterClass {                                // 외부 클래스
    // 외부 클래스 멤버들...

    public static class StaticNestedClass {       // 정적 중첩 클래스
        // 중첩 클래스 멤버들...
    }
}

정적 중첩 클래스 사용 예)
OuterClass.StaticNestedClass nestedObj = new OuterClass.StaticNestedClass();

 

2) 내부 클래스 ( Inner Class 또는 Non-Static Nested Class ) : 

내부 클래스는 static 없이 외부 클래스 안에 정의된 클래스다.

* static 멤버를 선언할 수 없다.

내부 클래스는 외부 클래스의 인스턴스와 연결되며, 외부 클래스의 모든 멤버에 접근할 수 있다.

* private로 선언된 멤버에도 접근할 수 있다.

내부 클래스는 캡슐화를 위해 사용한다.

하나의 클래스에서 어떤 공통적인 작업을 수행하는 클래스가 필요한데, 다른 클래스에서는 필요 없을 때 사용한다.

public class OuterClass {                  // 외부 클래스
    // 외부 클래스 멤버들...

    public class InnerClass {              // 내부 클래스 (Inner Class)
        // 내부 클래스 멤버들...
    }
}

내부 클래스 사용 예)
OuterClass outerObj = new OuterClass();
OuterClass.InnerClass innerObj = outerObj.new InnerClass();

 

3) 익명 클래스 ( Anonymous Class ) : 

클래스 정의를 통해 인스턴스를 생성하는 방법 중 하나이다.

클래스 이름이 없으며, 클래스의 정의와 인스턴스 생성을 동시에 수행할 수 있다.

클래스, 객체 이름이 없기 때문에 다른 클래스나 메소드에서 참조할 수 없다.

 

사용 목적 : 메모리 사용량과 애플리케이션 소요 시간을 낮추는게 목적이다.

* 클래스를 만들고 호출 시 메모리에 올라간다. 클래스가 많아지면, 메모리와 소요시간이 올라간다.

InterfaceName obj = new InterfaceName() {
       // 하나의 부모 클래스를 상속받거나 하나의 인터페이스 구현
};

 

4) 지역 클래스 ( Local Class ) : 

메서드나 블록 안에서 정의되는 클래스로, 로컬 변수와 마찬가지로 해당 메서드나 블록 내에서만 유효한 클래스다.

로컬 클래스는 익명 클래스와 달리 이름이 있고 해당 메서드나 블록 내부에서만 인스턴스를 생성하고 사용할 수 있다.

 

사용 목적 : 특정 메서드나 블록에서만 사용될 클래스를 정의하고, 캡슐화하는 목적이다. 로컬 클래스는 해당 메서드의 로컬 변수나 매개변수에 쉽게 접근할 수 있다.

  public class OuterClass {
    public void someMethod() {
        
        class LocalClass {                                // 로컬 클래스 정의
            // 로컬 클래스 멤버들...
        }
        
        // 로컬 클래스의 인스턴스 생성 및 사용
        LocalClass localObj = new LocalClass();
        // ...
    }
}

'자바' 카테고리의 다른 글

자바 JVM 이란  (0) 2023.07.18
자바 Call by value, Call by reference, 기본 자료형, 참조 자료형  (0) 2023.07.18
자바 final  (0) 2023.07.16
자바 접근 제어자  (0) 2023.07.15
자바 오버로딩과 오버라이딩  (0) 2023.07.14