자바의 **중첩 클래스(Nested Class)**는 클래스 안에 또 다른 클래스를 숨겨두는 기법입니다.
마치 복합 가전제품 속에 작은 부품들이 들어있는 것처럼, 특정 클래스 내에서만 쓰이는 클래스를 밀접하게 관리하기 위해 사용합니다.
📘 중첩 클래스(Nested Class)의 세계
중첩 클래스는 크게 멤버 클래스와 로컬 클래스로 나뉩니다.
1. Member class (멤버 클래스)
- 설명: 클래스의 멤버(필드, 메서드)처럼 클래스 내부에 선언된 클래스입니다.
- 종류:
- 인스턴스 멤버 클래스: 바깥 객체가 있어야만 생성 가능합니다.
- 정적(static) 멤버 클래스: 바깥 객체 없이도 독립적으로 생성 가능합니다.
- 비유: 자동차(바깥 클래스) 안의 엔진이나 타이어(멤버 클래스)와 같습니다.
Java
class Outer {
// 1. 인스턴스 멤버 클래스
class InstanceInner {
void method() { System.out.println("인스턴스 멤버 클래스입니다."); }
}
// 2. 정적 멤버 클래스
static class StaticInner {
void method() { System.out.println("정적 멤버 클래스입니다."); }
}
}
public class MemberClassExample {
public static void main(String[] args) {
// 인스턴스 멤버 클래스는 바깥 객체를 먼저 만들어야 합니다.
Outer out = new Outer();
Outer.InstanceInner inner = out.new InstanceInner();
// 정적 멤버 클래스는 바로 만들 수 있습니다.
Outer.StaticInner staticInner = new Outer.StaticInner();
}
}
2. Local class (로컬 클래스)
- 설명: 메서드 내부에서만 선언되고 사용되는 클래스입니다.
- 비유: 특정 작업을 위해 잠시 빌려 쓰는 일회용 도구와 같습니다.
- 특징: 메서드가 실행될 때만 존재하며, 메서드가 끝나면 사라집니다.
Java
class Outer {
void method() {
// 메서드 안에 클래스를 선언합니다.
class LocalInner {
void print() { System.out.println("로컬 클래스입니다."); }
}
// 메서드 안에서만 사용 가능합니다.
LocalInner li = new LocalInner();
li.print();
}
}
3. Nested Interface (중첩 인터페이스)
- 설명: 클래스 내부에 선언된 인터페이스입니다.
- 비유: 가전제품의 버튼 조작 방식(인터페이스)을 그 제품(클래스) 안에 정의해두는 것입니다.
- 활용: 주로 UI 이벤트 처리(버튼 클릭 등)에서 해당 클래스와 긴밀한 관계를 맺는 인터페이스를 만들 때 씁니다.
Java
class Button {
// 중첩 인터페이스
interface OnClickListener {
void onClick();
}
OnClickListener listener;
void setOnClickListener(OnClickListener listener) {
this.listener = listener;
}
void touch() {
listener.onClick();
}
}
public class NestedInterfaceExample {
public static void main(String[] args) {
Button btn = new Button();
// 중첩 인터페이스 구현
btn.setOnClickListener(() -> System.out.println("버튼을 클릭했습니다!"));
btn.touch();
}
}
👨🏫 쉽게 이해하는 핵심 포인트
- 캡슐화: 외부에는 숨기고 싶은 클래스를 안에 넣음으로써 코드를 더 깔끔하게 관리할 수 있습니다.
- 접근성: 중첩 클래스는 바깥 클래스의 private 멤버에도 쉽게 접근할 수 있어 데이터 공유가 편리합니다.
- 정적(static)의 차이: static이 붙은 중첩 클래스는 바깥 클래스의 인스턴스 필드에 접근할 수 없다는 점을 주의하세요!
오늘의 요약
- Member class: 클래스의 부품처럼 쓰이며, 위치에 따라 인스턴스/정적으로 나뉜다.
- Local class: 메서드 안에서만 반짝 쓰이고 사라지는 일회용 클래스이다.
- Nested Interface: 특정 클래스에 종속된 기능을 정의할 때 사용한다.
클래스 안에 클래스를 넣는 깊이 있는 구조까지 마스터하셨습니다!

'JAVA 80%' 카테고리의 다른 글
| Collection framework (0) | 2025.11.05 |
|---|---|
| Thread control (0) | 2025.11.05 |
| java.util package (0) | 2025.11.05 |
| java.lang package (0) | 2025.11.05 |
| Anonymous object (0) | 2025.11.05 |