728x90
🔹 중첩 클래스 (Nested Class)
**중첩 클래스(Nested Class)**는 클래스 내부에 선언된 클래스를 의미합니다.
Java에서 중첩 클래스는 크게 **내부 클래스(Inner Class)**와 **정적 중첩 클래스(Static Nested Class)**로 나뉩니다.
1️⃣ 내부 클래스 (Inner Class)
**내부 클래스(Inner Class)**는 외부 클래스의 인스턴스에 종속되는 클래스입니다.
즉, 외부 클래스의 멤버(변수, 메소드 등)에 자유롭게 접근할 수 있습니다.
✅ 사용 예시
class Outer {
private String message = "Hello from Outer!";
class Inner {
void display() {
System.out.println(message); // 외부 클래스의 private 변수에도 접근 가능
}
}
}
public class Main {
public static void main(String[] args) {
Outer outer = new Outer(); // 외부 클래스 객체 생성
Outer.Inner inner = outer.new Inner(); // 내부 클래스 객체 생성
inner.display(); // 출력: Hello from Outer!
}
}
✅ 특징
- 외부 클래스의 인스턴스가 있어야 내부 클래스를 사용할 수 있음.
- 외부 클래스의 private 멤버에도 접근 가능.
- 내부 클래스는 외부 클래스의 인스턴스를 암묵적으로 참조 (Outer.this 사용 가능).
2️⃣ 정적 중첩 클래스 (Static Nested Class)
**정적 중첩 클래스(Static Nested Class)**는 외부 클래스의 인스턴스와 독립적으로 존재할 수 있는 클래스입니다.
즉, static 키워드가 붙어 있으며, 외부 클래스의 인스턴스 없이 사용할 수 있습니다.
✅ 사용 예시
class Outer {
private static String message = "Hello from Static Nested Class!";
static class StaticNested {
void display() {
System.out.println(message); // 정적 멤버만 접근 가능
}
}
}
public class Main {
public static void main(String[] args) {
Outer.StaticNested nested = new Outer.StaticNested(); // 외부 클래스 인스턴스 없이 생성 가능
nested.display(); // 출력: Hello from Static Nested Class!
}
}
✅ 특징
- 외부 클래스의 인스턴스 없이도 생성 가능 (new Outer.StaticNested() 형태).
- 외부 클래스의 static 멤버에는 접근 가능하지만, 인스턴스 멤버에는 접근 불가능.
- 독립적으로 존재할 수 있어 메모리 사용량을 줄이고, 성능을 최적화할 수 있음.
3️⃣ 내부 클래스 vs 정적 중첩 클래스 비교
| 구분 | 내부 클래스 (Inner Class) | 정적 중첩 클래스 (Static Nested Class) |
| 인스턴스 종속 여부 | 외부 클래스의 인스턴스 필요 | 외부 클래스의 인스턴스 없이 생성 가능 |
| 외부 클래스 멤버 접근 | 모든 멤버(인스턴스 & static) 접근 가능 | static 멤버만 접근 가능 |
| 메모리 사용 | 외부 클래스의 인스턴스와 함께 유지됨 | 독립적으로 존재 가능, 메모리 절약 |
| 사용 목적 | 외부 클래스의 인스턴스와 강하게 연결된 경우 | 외부 클래스와 논리적으로 관련 있지만 독립적인 경우 |
🔥 언제 사용하면 좋을까?
- 내부 클래스 사용
- 외부 클래스의 인스턴스와 강한 관계가 있는 경우
- 외부 클래스의 private 멤버를 직접 사용해야 할 때
- 정적 중첩 클래스 사용
- 외부 클래스의 인스턴스와 독립적으로 동작해야 할 때
- 외부 클래스의 static 멤버만 필요할 때
- 메모리 사용을 최적화하고 싶을 때
🎯 정리
✔ 내부 클래스(Inner Class) → 외부 클래스 인스턴스 필요, 외부 클래스의 모든 멤버 접근 가능.
✔ 정적 중첩 클래스(Static Nested Class) → 외부 클래스 인스턴스 없이 사용 가능, static 멤버만 접근 가능.
* 상황에 맞게 내부 클래스와 정적 중첩 클래스를 적절히 활용하면, 코드의 가독성과 효율성이 향상됩니다!
728x90
'개발 > 자바' 카테고리의 다른 글
| Java 추상 클래스 (abstract class) (0) | 2025.02.18 |
|---|---|
| Java Enum (열거형) (0) | 2025.02.18 |
| final 변수와 final 전달인자 (0) | 2025.02.18 |
| final 클래스와 final 메소드 (0) | 2025.02.18 |
| protected 접근 제어자 다른 패키지 상속 방법 (0) | 2025.02.18 |