Java/자바 정리
83. 정적 멤버 클래스의 독립성 – 외부 인스턴스 없이 자유롭게 활용
코딩하는냥이
2025. 5. 12. 11:08
반응형
이번 글에서는 자바의 중첩 클래스 중 정적(static) 멤버 클래스를
외부 클래스의 모든 영역에서 어떻게 활용할 수 있는지를 학습합니다.
또한 정적 클래스가 가지는 외부 클래스와의 독립성도 강조합니다.
📦 외부 클래스 (A.java)
package ch09.sec03.exam01;
public class A {
static class B { } // 정적 멤버 클래스
B field1 = new B(); // 인스턴스 필드
static B field2 = new B(); // 정적 필드
A() {
B b = new B(); // 생성자에서 사용
}
void method() {
B b = new B(); // 인스턴스 메서드에서 사용
}
static void method2() {
B b = new B(); // 정적 메서드에서도 사용 가능
}
}
✔ B 클래스는 A의 정적(static) 멤버 클래스
✔ 외부 클래스의 모든 영역에서 객체 생성 가능
📌 실행 클래스 (AExample.java)
package ch09.sec03.exam01;
public class AExample {
public static void main(String[] args) {
A.B b = new A.B(); // 외부 클래스 인스턴스 없이 바로 생성 가능
}
}
💻 실행 결과
(출력 없음 – 정상 컴파일 및 실행)
💬 코드 설명
- static class B는 외부 클래스 A의 정적 멤버 클래스
- B는 외부 클래스 A의 생성자, 인스턴스 메서드, 정적 메서드 등 모든 곳에서 사용 가능
- AExample 클래스에서도 A.B b = new A.B(); 형식으로 직접 객체 생성 가능
- 즉, B는 A 클래스와 논리적으로만 연결되어 있을 뿐, 인스턴스 종속적이지 않음
📌 간단 정리
위치 | B 클래스 사용 가능 여부 | 설명 |
A 클래스의 생성자 | ✅ 사용 가능 | 일반적인 객체 사용과 동일 |
A 클래스의 인스턴스 메서드 | ✅ 사용 가능 | 외부 인스턴스 있음 |
A 클래스의 static 메서드 | ✅ 사용 가능 | 정적 멤버라 접근 가능 |
외부 클래스(예: AExample) | ✅ 사용 가능 | new A.B() 으로 직접 생성 가능 |
💡 포인트 정리
- static class B는 A 클래스 인스턴스 없이도 사용 가능
- 외부 클래스의 모든 블록(정적/비정적)에서 접근 가능
- 코드의 구조를 논리적으로 묶으면서도 독립적으로 활용 가능
- 주로 도우미 클래스, 정적 유틸 클래스, 상수 클래스 등에 사용
📌 정리하자면,
정적 멤버 클래스는 외부 클래스의 일부처럼 보이지만,
외부 클래스 인스턴스와 독립적으로 존재할 수 있는 클래스로,
깔끔한 구조와 명확한 책임 분리가 필요할 때 유용합니다.