1. 내부 클래스란?
내부 클래스는 클래스 내부에 선언된 클래스이다.
class Outer {
class Inner {
}
}
- 외부 클래스와 논리적으로 강하게 묶인 클래스
- 외부 클래스의 멤버에 접근 가능
- 코드 구조를 더 명확하게 표현 가능
2. 내부 클래스의 종류
- 일반 내부 클래스 (Inner Class)
- static 내부 클래스 (Static Nested Class)
- 지역 내부 클래스 (Local Inner Class)
- 익명 내부 클래스 (Annonymous Inner Class)
3. 일반 내부 클래스 (Inner Class)
일반 내부 클래스는 외부 클래스의 인스턴스에 속하는 클래스이다.
특징
- 외부 클래스 객체가 있어야 생성 가능
- 외부 클래스의 모든 멤버 접근 가능 (private 포함)
class Outer {
int x = 10;
class Inner {
void print() {
System.out.println(x);
}
}
}
//객체 생성 > 외부 객체 없이는 생성 불가
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
4. static 내부 클래스 (Static Nested Class)
static 내부 클래스는 외부 클래스 인스턴스와 무관한 내부 클래스이다.
특징
- 외부 클래스 객체 없이 생성 가능
- 외부 클래스의 static 멤버만 접근 가능
- 일반 내부 클래스보다 독립성 높음
class Outer {
static int x = 10;
static class Inner {
void print() {
System.out.println(x);
}
}
}
//객체 생성 -> Outer의 static 멤버 이기 때문에 외부 객체 생성이 필요 없음!!
Outer Inner inner = new Outer.Inner();
5. 일반 내부 클래스 vs static 내부 클래스
| 구분 | 일반 내부 클래스 | static 내부 클래스 |
| 외부 인스턴스 접근 | O | X |
| static 멤버 접근 | O | O |
| 외부 객체 필요 | O | X |
| 독립성 | 낮음 | 높음 |
6. 지역 내부 클래스 (Local Inner Class)
지역 내부 클래스는 메서드 내부에서 선언된 클래스이다.
특징
- 해당 메서드 내부에서만 사용 가능
- 메서드의 지역 변수에 접근 가능
class Outer {
void method() {
class LocalInner {
void print() {
System.out.println("local inner");
}
}
LocalInner inner = new LocalInner();
inner.print();
}
}
7. 익명 내부 클래스 (Annonymous Inner Class)
익명 내부 클래스는 이름이 없는 내부 클래스이다. 주로 인터페이스 구현이나 추상 클래스 상속을 즉석에서 처리할 때 사용한다.
특징
- 클래스 이름 없음
- 일회성 사용
- 객체 생성과 동시에 정의
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("run");
}
};
// 구현 클래스가 익명으로 만들어진다는 의미
8. 내부 클래스 사용 목적
- 외부 클래스와 강하게 연관된 로직을 표현할 때
- 외부 클래스의 구현 세부사항을 숨기고 싶을 때
- 코드 가독성을 높이고 싶을 때
- 일반 내부 클래스 -> 외부 객체 상태에 의존
- static 내부 클래스 -> 외부 객체와 독립
9. 정리
- 내부 클래스는 클래스 안에 선언된 클래스이다
- 일반 내부 클래스는 외부 객체에 의존한다
- static 내부 클래스는 외부 객체 없이 생성 가능하다
- 지역 내부 클래스는 메서드 내부에서만 사용된다
- 익명 내부 클래스는 일회성 구현 클래스이다
- static의 의미는 객체 소속이 아님이다
'Java & Spring > Java' 카테고리의 다른 글
| 예외 개념과 자바 예외 구조 (0) | 2026.01.07 |
|---|---|
| Enum의 개념과 사용 (0) | 2026.01.07 |
| 추상화 (0) | 2026.01.07 |
| SOLID 원칙 (0) | 2026.01.06 |
| 다형성 (Polymorphism) (0) | 2026.01.06 |