본문 바로가기

반응형

이번 글에서는 자바 중첩 클래스 중 정적(static) 멤버 클래스에 대해 학습합니다.
외부 클래스의 객체 없이도 사용할 수 있으며, 정적 필드/메서드 선언도 가능한 구조입니다.


📦 외부 클래스 (A.java)

package ch09.sec02.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 실행");
		}
	}

	void useB() {
		B b = new B();
		System.out.println(b.field1);   // 인스턴스 필드 사용
		b.method1();                    // 인스턴스 메서드 호출

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

✔ class B는 static 키워드로 선언된 정적 멤버 클래스
✔ 외부 클래스 A의 객체 없이도 접근 가능


📌 실행 클래스 (AExample.java)

package ch09.sec02.exam02;

public class AExample {
	public static void main(String[] args) {
		A a = new A();
		a.useB();  // 내부에서 정적 멤버 클래스 B 사용
	}
}

💻 실행 결과

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

💬 코드 설명

  • static class B는 외부 클래스 A의 정적 멤버 클래스
  • 내부에 인스턴스 필드, 정적 필드, 인스턴스 메서드, 정적 메서드 모두 선언 가능
  • A 클래스 내부 메서드에서 객체 생성 없이도 B.field2, B.method2() 접근 가능
  • 외부 클래스의 인스턴스 없이도 단독 생성 및 호출 가능

📌 간단 정리

항목 내용
클래스 선언 방식 static class B { ... }
객체 생성 방식 A.B b = new A.B(); 또는 new B();
외부 클래스 필요 ❌ 인스턴스 없이도 사용 가능
사용 목적 외부 클래스와 느슨하게 연결된 구조 설계

💡 포인트 정리

  • 정적 멤버 클래스는 외부 클래스의 인스턴스 없이도 사용 가능
  • 정적 멤버 선언(static 필드, static 메서드)도 가능
  • 유틸리티용 중첩 클래스, 정적 구조 정의에 적합
  • 외부 클래스와 논리적으로는 연관 있지만 독립적인 클래스로 쓰기 좋음

📌 정리하자면,
정적 멤버 클래스는 중첩되어 있지만 외부 클래스와 독립적으로 사용할 수 있는 구조로,
정적 멤버나 유틸성 메서드를 담는 데 매우 적합합니다.

댓글