Java에서 중첩 클래스(Nested Class)는 다른 클래스 내부에 정의된 클래스를 의미한다.
중첩 클래스의 종류
중첩 클래스는 다음과 같이 네 가지로 분류된다.
- 내부 클래스(Inner Class)
- 정적 중첩 클래스(Static Nested Class)
- 지역 클래스(Method Local Inner Class)
- 익명 클래스(Anonymous Class)
각각의 중첩 클래스는 사용하는 방법과 특징이 다르므로 아래에서 자세히 살펴보자.
내부 클래스 (Inner Class)
내부 클래스는 외부 클래스의 멤버로 선언되는 클래스이며 Non-Static Nested Class라고도 한다.
- 외부 클래스의 인스턴스에 종속적이다.
- 외부 클래스의 모든 멤버(인스턴스 변수 및 메서드)에 접근할 수 있다.
- 외부 클래스의 인스턴스를 생성한 후에 내부 클래스의 인스턴스를 생성할 수 있다.
내부 클래스는 외부 클래스의 인스턴스와 연결되어 있으므로 외부 클래스 없이 단독으로 사용할 수 없다.
정적 중첩 클래스 (Static Nested Class)
정적 중첩 클래스는 static 키워드로 선언된 중첩 클래스로 Static Nested Class라고 한다.
- 외부 클래스의 정적 멤버처럼 동작한다.
- 외부 클래스의 인스턴스 없이도 객체를 생성할 수 있다.
- 외부 클래스의 정적 멤버에만 접근할 수 있으며 인스턴스 멤버에는 접근할 수 없다.
정적 중첩 클래스는 외부 클래스의 이름 공간에 속하지만 외부 클래스의 인스턴스와는 독립적으로 존재한다.
지역 클래스 (Method Local Inner Class )
지역 클래스는 메서드나 초기화 블록 내부에서 선언되는 클래스다.
- 선언된 블록 내에서만 사용할 수 있다.
- 접근 제어자나 static 키워드를 사용할 수 없다.
- 외부 클래스의 멤버뿐만 아니라, 감싸고 있는 메서드의 로컬 변수에도 접근할 수 있다.
- 단, 해당 변수는 final 또는 사실상 final이어야 한다.
- 단, 해당 변수는 final 또는 사실상 final이어야 한다.
지역 클래스는 메서드 내에서만 유효하므로 외부에서 접근할 수 없다.
익명 클래스 (Anonymous Class)
익명 클래스는 이름이 없는 클래스이며 주로 일회성으로 사용하기 위해 선언된다.
- 클래스 선언과 동시에 인스턴스를 생성한다.
- 클래스나 인터페이스를 구현하거나 확장할 때 사용한다.
- 익명 클래스는 생성자를 가질 수 없으며 하나의 클래스나 인터페이스만 구현할 수 있다.
- 외부 클래스나 메서드의 final 또는 사실상 final인 변수에 접근할 수 있다.
'Dev > Java' 카테고리의 다른 글
『Java』 Map, Stack, Queue, Deque (0) | 2024.11.28 |
---|---|
『Java』 Java 8, Stream 기본 (1) | 2024.11.24 |
『Java』 스레드는 어떻게 메모리를 공유하는가? (0) | 2024.11.22 |
『Java』 HashMap은 어떤 원리로 동작하는가 (0) | 2024.11.22 |
『Java』 상속보다 컴포지션을 사용해야 하는 이유 (0) | 2024.11.20 |