중첩클래스를 통해 외부 클래스와 연관된 내부클래스를 쉽게 정의, 클래스 간 관계를 명확하게 표현할 수 있습니다.
중첩클래스는 정적(static)중첩 클래스와 비정적(non-static) 중첩클래스(내부 클래스)로 나뉩니다.
class A{
//멤버 이너클래스
class B{ ... } //인스턴스 멤버클래스
static class C { ... } //정적 멤버클래스
//지역 이너클래스
void abc(){
class D { ... } //지역 클래스
}
}
| 종류 |
구현 위치 | 사용할 수 있는 외부 클래스 변수 | 생성 방법 |
| 인스턴스 내부 클래스 | 외부 클래스 멤버 변수와 동일 | 외부 인스턴스 변수, 외부 전역 변수 |
외부 클래스 인스턴스를 만든 후 생성 |
| 정적 내부 클래스 | 외부 클래스 멤버 변수와 동일 | 외부 전역 변수 | 외부 클래스 인스턴스 없이도 생성 가능 |
| 지역 내부 클래스 | 메서드 내부에 구현 | 외부 인스턴스 변수, 외부 전역변수, 메서드 변수 |
메서드 호출 시 생성, 메서드 내에서만 사용 가능 |
| 익명 내부 클래스 | 메서드 내부에 구현 | 외부 인스턴스 변수, 외부 전역 변수 |
선언과 동시에 생성 |
1.인스턴스 내부 클래스(Instance Inner Class)
- 외부 클래스의 인스턴스와 함께 생성되는 클래스
- 외부 클래스의 멤버 변수와 전역 변수에 모두 접근 가능.
- 외부 클래스의 인스턴스를 생성한 후, 인스턴스 멤버 클래스를 생성해야 하며, 외부 클래스와 밀접하게 연관된 기능을 수행할 때 유용.
2.정적 내부 클래스(Static Nested Class)
- 외부 클래스의 인스턴스 없이 독립적으로 생성할 수 있는 클래스
- 외부 클래스의 정적 변수 및 정적 메서드에만 접근할 수 있으며, 외부 클래스의 인스턴스 변수에는 접근 불가능
- 주로 외부 클래스와 독립적인 기능을 수행할 때 사용
3.지역 내부 클래스(Local Class)
- 외부 클래스의 메서드 내부에서 정의된 클래스.
- 메서드가 호출될 때 생성되며, 메서드가 종료되면 더 이상 사용할 수 없음.
- 해당 메서드의 지역변수와 외부 클래스의 변수에 접근할 수 있음.
- 메서드 내부에서 특정한 작업을 수행할 때만 사용
4.익명 내부 클래스
- 이름이 없는 클래스
- 인터페이스나 추상클래스를 구현하는 즉석 객체를 생성할 때 사용
- 주로 이벤트 핸드리러와 같이 간단하게 필요한 기능을 1번만 구현할 때 유용
- new 키워드를 사용하여 선언과 동시에 인스턴스를 생성, 인스턴스는 일회용으로 사용
public interface InterA {
// 인터페이스 메서드 선언 (추상 메서드)
void viewInner();
}
'Backend > Java' 카테고리의 다른 글
| [Java]Enum(열거형) (2) | 2024.10.31 |
|---|---|
| [Java] 커넥션 풀 (0) | 2024.10.31 |
| [Java]Java IO(Exception/throw/File/스트림) (0) | 2024.10.24 |
| [Java] Collection (2) | 2024.10.23 |
| [java] System/Data/Calendar/Random/Array 클래스 (0) | 2024.10.22 |