Java

중첩 클래스 / 인스턴스 멤버 클래스 / 정적 멤버 클래스

공부처음하는사람 2024. 7. 5. 23:42

 

중첩클래스

 

중첩클래스란 클래스 내부에 선언하는 클래스이다.

 

중첩클래스의 장점

- 클래스의 멤버를 쉽게 사용할 수 있음

- 외부에 중첩 관계를 감춤으로써 코드 복잡성을 줄일 수 있음

 

중첩클래스를 선언하는 위치는 두가지로 분류된다.

 

1. 멤버 클래스

- 인스턴스 멤버 클래스

- 정적 멤버 클래스

선언 위치에 따른 분류 선언 위치 객체 생성 조건
멤버 클래스 인스턴스 멤버 클래스 class A {
    class B {..}
}
A 객체를 생성해야만 
B 객체 생성 가능
정적 멤버 클래스 class A{
    static class B{...}
}
A 객체 생성없이
B 객체 생성 가능
로컬 클래스 class A{
    void method() {
        class B {....}
    }
}
method가 실행할 때만
B 객체 생성 가능

 

중첩 클래스도 하나의 클래스이기 때문에 컴파일하면 바이트코드 파일 (.class)이 별도로 생성된다.

 

 

인스턴스 멤버 클래스

public class A {
	[public|private] class B {  // 인스턴스 멤버 클래스
    }
}

 

인스턴스 멤버 클래스는 위와 같이 A 클래스의 멤버로 선언된 B클래스를 말한다.

 

접근 제한자에 따른 인스턴스 멤버 클래스의 접근 범위

public class B{ } : 다른 패키지에서 B 클래스 사용 가능

class B { } : 같은 패키지에서만 B 클래스 사용 가능

private class B { } : A 클래스 내부에서만 B 클래스 사용 가능

 

인스턴스 멤버 클래스 B는 주로 A 클래스 내부에서 사용되므로 private 제한자를 갖는것이 일반적이다.

B 객체는 A클래스의 인스턴스 필드값, 생성자, 인스턴스 메소드에서만 생성할 수 있다. A 객체가 있어야 B객체도 생성할 수 있기 때문.

 

 

정적 멤버 클래스

public class A {
	[public|private] static class B {   // 정적 멤버 클래스
    }
}

 

정적 멤버 클래스는 위와 같이 static 키워드와 함께 A클래스 멤버로 선언된 B 클래스를 말한다.

접근제한자 범위는 인스턴스 멤버와 같다.

 

정적 멤버 클래스 B는 A클래스 내부에서 사용되기도 하지만, A 클래스 외부에서 A와 함께 사용되는 경우가 많기에

default 또는 public 접근 제한을 갖는다. B 객체는 A클래스 내부 어디든 객체를 생성할 수 있다.

 

package ch09.sec03.ex01;

public class AEx {
    public static void main(String[] args) {

        A.B b = new A.B();
    }
}

 

A 클래스 외부에서 B 객체를 생성하려면 A 객체 생성 없이 A 객체에 접근해 B객체를 생성할 수 있다.

'Java' 카테고리의 다른 글

중첩 인터페이스  (0) 2024.07.06
로컬 클래스 / 바깥 클래스  (0) 2024.07.06
인터페이스 - private 메소드  (0) 2024.07.01
싱글톤  (0) 2024.06.23
Getter / Setter  (0) 2024.06.23