Java/자바 정리

81. 인스턴스 멤버 클래스 – 클래스 안에 클래스가 있다고요?

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

이번 글에서는 중첩 클래스(Inner Class) 중에서도
인스턴스 멤버 클래스(Instance Member Class) 에 대해 학습합니다.
이 클래스는 외부 클래스의 인스턴스 멤버와 밀접하게 연결된 구조를 가질 수 있습니다.


📦 외부 클래스 (A.java)

package ch09.sec02.exam01;

public class A {
	class B { } // 인스턴스 멤버 클래스

	B field = new B(); // A의 인스턴스 멤버에서 B 사용

	A() {
		B b = new B(); // 생성자에서 B 객체 생성 가능
	}

	void method() {
		B b = new B(); // 메서드에서도 생성 가능
	}
}

✔ B는 A 내부에 선언된 인스턴스 멤버 클래스
✔ A의 객체가 생성되어야만 사용할 수 있음


📌 실행 클래스 (AExample.java)

package ch09.sec02.exam01;

public class AExample {
	public static void main(String[] args) {
		A a = new A();         // A 객체 생성
		A.B b = a.new B();     // A 객체를 기반으로 B 객체 생성
	}
}

💻 실행 결과

(출력 내용 없음 — 컴파일 및 런타임 오류 없이 객체 생성됨)


💬 코드 설명

  • class B는 class A의 인스턴스 멤버 클래스
    정적(static)이 아님 → A의 인스턴스가 있어야 생성 가능
  • a.new B()
    → A 객체를 통해서만 내부 클래스 B 객체 생성 가능
  • 내부 클래스 B는 A 클래스의 필드, 생성자, 메서드 어디서든 사용 가능

📌 간단 정리

항목 내용
선언 위치 클래스 A 내부 (정적 아님)
객체 생성 방식 A a = new A(); A.B b = a.new B();
외부 클래스 접근 A의 인스턴스 멤버에 접근 가능
사용 목적 외부 클래스와 논리적으로 강하게 연결된 구조 구현용

💡 포인트 정리

  • 인스턴스 멤버 클래스는 외부 클래스 객체가 존재해야만 생성 가능
  • 외부 클래스의 필드나 메서드에 자유롭게 접근 가능
  • 주로 외부 클래스의 기능을 도와주는 부가적인 클래스를 만들 때 사용
  • 내부 클래스를 사용하면 캡슐화 강화, 코드 응집력 증가

📌 정리하자면,
인스턴스 멤버 클래스는 외부 클래스의 멤버처럼 동작하면서도
클래스 안에서 논리적인 구조를 정돈할 수 있는 유용한 도구입니다.