Java/자바 정리

84. 정적 멤버 클래스의 활용 – 인스턴스와 static 멤버를 모두 가진 클래스

코딩하는냥이 2025. 5. 12. 11:12
반응형

이번 글에서는 정적(static) 멤버 클래스
인스턴스 멤버와 정적 멤버를 동시에 가질 수 있는 구조임을 확인하고,
이를 어떻게 활용할 수 있는지를 실습합니다.


📦 외부 클래스 (A.java)

package ch09.sec03.exam02;

public class A {
	static class B {
		int field1 = 1;          // 인스턴스 필드
		static int field2 = 2;   // 정적 필드

		B() {
			System.out.println("B-생성자 실행");
		}

		void method1() {
			System.out.println("B-method1 실행");
		}

		static void method2() {
			System.out.println("B-method2 실행");
		}
	}
}

✔ B는 정적 멤버 클래스이면서
인스턴스 필드(field1), 정적 필드(field2),
인스턴스 메서드(method1()), 정적 메서드(method2()) 모두 가짐


📌 실행 클래스 (AExample.java)

package ch09.sec03.exam02;

public class AExample {
	public static void main(String[] args) {
		A.B b = new A.B();             // B 객체 생성
		System.out.println(b.field1);  // 인스턴스 필드 호출
		b.method1();                   // 인스턴스 메서드 호출

		System.out.println(A.B.field2); // 정적 필드 호출
		A.B.method2();                  // 정적 메서드 호출
	}
}

💻 실행 결과

B-생성자 실행
1
B-method1 실행
2
B-method2 실행

💬 코드 설명

  • A.B b = new A.B();
    → 외부 클래스 A의 인스턴스 없이도 B 클래스의 인스턴스 생성 가능
  • b.field1, b.method1()
    → B 클래스의 인스턴스 멤버에 접근
  • A.B.field2, A.B.method2()
    → B 클래스의 정적 멤버에 클래스 이름으로 직접 접근

✔ 이처럼 정적 멤버 클래스 내부에서도 정적/비정적 멤버를 모두 선언 가능!


📌 간단 정리

멤버 종류 접근 방식 설명
인스턴스 필드 b.field1 B 객체가 필요함
정적 필드 A.B.field2 클래스 이름으로 직접 접근 가능
인스턴스 메서드 b.method1() B 객체가 필요함
정적 메서드 A.B.method2() 클래스 이름으로 직접 접근 가능

💡 포인트 정리

  • 적 멤버 클래스는 외부 인스턴스 없이 사용 가능
  • 내부에 정적 필드/메서드 + 인스턴스 필드/메서드를 모두 선언 가능
  • 유틸리티 도구처럼도 사용 가능하며, 외부 클래스의 논리적 구성 요소로 좋음
  • 외부에서 사용 시 A.B처럼 외부 클래스명.내부 클래스명으로 접근

📌 정리하자면,
정적 멤버 클래스는 내부 구조에서 정적/인스턴스 멤버를 모두 가질 수 있는 유연한 구조이며,
외부 인스턴스 없이도 사용할 수 있어 재사용성과 구조화에 매우 효과적입니다.