반응형
이번 글에서는 정적(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처럼 외부 클래스명.내부 클래스명으로 접근
📌 정리하자면,
정적 멤버 클래스는 내부 구조에서 정적/인스턴스 멤버를 모두 가질 수 있는 유연한 구조이며,
외부 인스턴스 없이도 사용할 수 있어 재사용성과 구조화에 매우 효과적입니다.
'Java > 자바 정리' 카테고리의 다른 글
87. 내부 클래스에서 외부 클래스 참조하기 – this vs A.this (0) | 2025.05.12 |
---|---|
86. 인스턴스 멤버 클래스 vs 정적 멤버 클래스 – 접근 가능한 멤버는? (0) | 2025.05.12 |
85. 로컬 클래스(Local Class) – 메서드 안에 클래스가?! (0) | 2025.05.12 |
83. 정적 멤버 클래스의 독립성 – 외부 인스턴스 없이 자유롭게 활용 (0) | 2025.05.12 |
82. 정적(static) 멤버 클래스 – 외부 객체 없이도 작동하는 중첩 클래스 (0) | 2025.05.12 |
81. 인스턴스 멤버 클래스 – 클래스 안에 클래스가 있다고요? (0) | 2025.05.12 |