중첩클래스
중첩클래스란 클래스 내부에 선언하는 클래스이다.
중첩클래스의 장점
- 클래스의 멤버를 쉽게 사용할 수 있음
- 외부에 중첩 관계를 감춤으로써 코드 복잡성을 줄일 수 있음
중첩클래스를 선언하는 위치는 두가지로 분류된다.
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 |