내부 클래스는 클래스 내에 선언된 클래스다. 두 클래스가 서로 긴밀한 관계에 있을 때 내부 클래스를 사용한다.
class Outer { // 외부 클래스
...
class Inner { // 내부 클래스
...
}
...
}
내부 클래스는 필드와 마찬가지로 선언된 위치에 따라 다음과 같이 구분됩니다.
- 정적 클래스(static class)
- 인스턴스 클래스(instance class)
- 지역 클래스(local class)
- 익명 클래스(anonymous class)
정적 클래스(static class)는 주로 외부 클래스(outer class)의 클래스 메소드에 사용될 목적으로 선언됩니다.
외부 클래스 영역에 선언된 클래스 중에서 static 키워드를 가지지 않는 클래스를 인스턴스 클래스(instance class)라고 합니다.
이러한 인스턴스 클래스는 주로 외부 클래스(outer class)의 인스턴스 변수나 인스턴스 메소드에 사용될 목적으로 선언됩니다.
지역 클래스(local class)란 외부 클래스의 메소드나 초기화 블록에 선언된 클래스를 의미합니다.
이러한 지역 클래스는 선언된 블록 내에서만 사용할 수 있습니다.
- 프로그램에서 일시적으로 한번만 사용되고 버려지는 클래스
- 재사용성이 없고, 확장성을 활용하는 것이 유지보수에서 더 불리할 때 사용
- 익명 클래스는 클래스의 선언과 동시에 객체를 생성하므로, 단 하나의 객체만을 생성하는 일회용 클래스입니다.
// 익명 클래스는 선언과 동시에 생성하여 참조변수에 대입함.
클래스이름 참조변수이름 = new 클래스이름(){
// 메소드의 선언
};