[Java] 중첩 클래스와 내부 클래스_2

SeoYoon·2024년 11월 12일

💗JAVA

목록 보기
14/21

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

(1)정적 중첩 클래스

: 정적 중첩 클래스는 외부 클래스의 인스턴스와 관계없이 독립적으로 존재할 수 있는 클래스. 정적 중첩 클래스는 외부 클래스의 정적 멤버에만 접근할 수 있으며, 외부 클래스의 인스턴스 멤버에는 접근할 수 없다. 주로 외부 클래스와 관련된 추가적인 기능을 제공할 때 유용하게 사용됨

(2)중첩 클래스의 접근

  1. 나의 클래스에 포함된 중첩 클래스가 아니라 다른 곳에 있는 중첩 클래스에 접근할 때는 바깥 클래스.중첩클래스로 접근해야 한다.
NestedOuter.Nested nested = new NestedOuter.Nested();
  1. 나의 클래스에 포함된 중첩 클래스에 접근할 땐 바깥 클래스 이름을 적지 않아도 된다.

1-2. 예시 코드

class OuterClass {
	private static String staticOuterVar = "Outer Static Variable"; // 정적 멤버
    private String instanceVar = "Outer Instance Variable"; // 인스턴스 멤버
    
    // 정적 중첩 클래스
    static class StaticNestedClass {
    	void display() {
        System.out.println(staticOuterVAr); // 외부 클래스의 정적 멤버에 접근 가능
    // System.out.println(instanceVar); // 오류 발생 : 외부 클래스의 인스턴스 멤버는 접근할 수 없음
    }
}

    public static void main(String[] args) {
    // 정적 중첩 클래스는 외부 클래스의 인스턴스를 생성하지 않고 독립적으로 생성 가능
    StaticNested[]Class nested = new StaticNestedClass();
    nested.display(); // 출력 : Outer Static Variable

    }

예시 코드 설명

  • OuterClass에는 정적 멤버인 staticOuterVar와 인스턴스 멤버인 instanceVar가 있음
  • StaticNestedClass는 정적 중첩 클래스로, OuterClass의 정적 멤버인 staticOuterVar에 접근 가능
  • 그러나 StaticNestedClass는 외부 크래스의 인스턴스 멤버인 instanceVar에는 접근할 수 없음. 주석 처리된 System.out.println(instanceVar)부분은 컴파일 오류 발생
  • StaticNestedClassOuterClass의 인스턴스를 생성하지 않고 독립적으로 생성할 수 있음


2. 비정적 내부 클래스 사용과 정적 중첩 클래스 사용 비교

구분비정적 내부 클래스 사용정적 중첩 클래스 사용
외부 클래스 인스턴스 생성 여부외부 클래스의 인스턴스를 생성해야 내부 클래스 생성 가능외부 클래스 인스턴스 없이 독립적으로 생성 가능
메모리 효율성외부 클래스의 인스턴스를 매번 생성해야 하므로 메모리 낭비 가능외부 클래스의 인스턴스를 생성하지 않으므로 메모리 효율적
접근할 수 있는 멤버외부 클래스의 인스턴스 멤버에도 접근 가능외부 클래스의 정적 멤버에만 접근 가능
용도외부 클래스와 밀접한 관계가 있을 때 사용외부 클래스와 독립적으로 기능을 추가할 때 유용

정리

  • 정적 중첩 클래스는 외부 클래스의 정적 멤버에만 접근할 수 있으며, 외부 클래스의 인스턴스를 생성하지 않고 독립적으로 사용할 수 있음.
  • 인스턴스 멤버에 접근할 필요가 없거나, 외부 클래스와 논리적으로 밀접한 관련이 있으면서 독립적으로 동작해야 하는 경우에 유용함
profile
공부 기록

0개의 댓글