내부 클래스
내부 클래스는 클래스 내에 선언된 클래스로 두 클래스가 서로 긴밀한 관계에 있을 때 이러한 방식을 사용한다. 이렇게 내부 클래스를 선언하면 2가지의 장점이 존재한다.
- 내부 클래스에서 외부 클래스의 멤버들에 쉽게 접근할 수 있다.
- 코드의 복잡성을 줄일 수 있다.(캡슐화)
class A{ // 외부 클래스
class B{ // 내부 클래스
}
}
이 때 내부 클래스 B는 외부 클래스인 A를 제외하고는 다른 클래스에서 잘 사용되지 않는 것이어야 한다.
내부 클래스의 종류와 특징
내부 클래스의 종류는 변수의 선언위치에 따른 종류와 같다. 내부 클래스는 변수를 선언하는 것과 같은 위치에 선언할 수 있으며, 변수의 선언 위치에 따라 인스턴스 변수, 클래스 변수, 지역 변수로 구분되는 것과 같이 내부 클래스도 위치에 따라 구분된다.
- 인스턴스 클래스 : 외부 클래스의 멤버변수 위치에 선언하며, 외부 클래스의 인스턴스 멤버처럼 다루어짐
- 스태틱 클래스 : 외부 클래스의 멤버변수 위치에 선언하며, 외부 클래스의 static 멤버처럼 다루어짐
- 지역 클래스 : 외부 클래스의 메소드나 초기화블럭 안에 선언, 선언된 영역 내부에서만 사용 가능
- 익명 클래스 : 클래스의 선언과 객체의 생성을 동시에 하는 이름 없는 클래스(일회용)
class Outer{
int iv = 0;
static int cv = 0;
void myMethod(){
int lv = 0;
}
}
==
class Outer{
class InstanceInner{ } // 인스턴스 클래스
static class StaticInner{ } // 스태틱 클래스
void myMethod(){
class LocalInner{ } // 지역 클래스
}
}