반응형
이번 글에서는 자바 중첩 클래스 중 정적(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 메서드)도 가능
- 유틸리티용 중첩 클래스, 정적 구조 정의에 적합
- 외부 클래스와 논리적으로는 연관 있지만 독립적인 클래스로 쓰기 좋음
📌 정리하자면,
정적 멤버 클래스는 중첩되어 있지만 외부 클래스와 독립적으로 사용할 수 있는 구조로,
정적 멤버나 유틸성 메서드를 담는 데 매우 적합합니다.
'프로그래밍 > JAVA' 카테고리의 다른 글
85. 로컬 클래스(Local Class) – 메서드 안에 클래스가?! (0) | 2025.05.12 |
---|---|
84. 정적 멤버 클래스의 활용 – 인스턴스와 static 멤버를 모두 가진 클래스 (0) | 2025.05.12 |
83. 정적 멤버 클래스의 독립성 – 외부 인스턴스 없이 자유롭게 활용 (0) | 2025.05.12 |
81. 인스턴스 멤버 클래스 – 클래스 안에 클래스가 있다고요? (0) | 2025.05.12 |
80. 인터페이스와 람다식 – 익명 객체 대신 사용하는 간결한 표현 (2) | 2025.05.12 |
79. instanceof와 패턴 매칭 – 안전한 형변환과 실행 흐름 제어 (0) | 2025.05.09 |