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 클래스 인스턴스 없이도 사용 가능
  • 외부 클래스의 모든 블록(정적/비정적)에서 접근 가능
  • 코드의 구조를 논리적으로 묶으면서도 독립적으로 활용 가능
  • 주로 도우미 클래스, 정적 유틸 클래스, 상수 클래스 등에 사용

📌 정리하자면,
정적 멤버 클래스는 외부 클래스의 일부처럼 보이지만,
외부 클래스 인스턴스와 독립적으로 존재할 수 있는 클래스로,
깔끔한 구조와 명확한 책임 분리가 필요할 때 유용합니다.