
class Outer {
...
// 정적 중첩 클래스
static class StaticNested {
...
}
// 내부 클래스
class Inner {
...
}
}
static사용static 사용Xclass Outer {
public void process() {
// 지역 변수
int localVAr = 0;
// 지역 클래스
class Local {...}
Local local = new Local();
}
}
static이 붙음static이 붙지 않음. 즉, 인스턴스 멤버가 됨* 내부 클래스(inner class) : 바깥 클래스의 인스턴스 멤버에 접근
* 지역 클래스(local class) : 내부 클래스의 특징 + 지역 변수에 접근
* 익명 클래스(anonymous class) : 지역 클래스의 특징 + 클래스의 이름이 없는 특별한 클래스
private 접근 제어자는 같은 클래스 안에 있을 때만 접근할 수 있음private 접근 제어자에 접근할 수 있음바깥 클래스에서 봤을 때 안의 클래스가 나의 인스턴스에 소속이 되는가 되지 않는가의 차이
정적 중첩 클래스는 바깥 클래스와 전혀 다른 클래스(바깥 인스턴스에 소속X)
내부 클래스는 바깥 클래스를 구성하는 요소(바깥 인스턴스에 소속)
* 중첩 클래스 : 정적 중첩 클래스 + 내부 클래스 종류 모두
* 정적 중첩 클래스 : static 키워드로 선언된 중첩 클래스로, 하나의 클래스 내부에 다른 클래스를 정의하는 중첩 클래스의 한 종류이며 외부 클래스의 인스턴스 없이 독립적으로 사용 가능
* 내부 클래스 : 클래스 안에 또 다른 클래스를 정의한 것. 내부 클래스는 외부 클래스와 밀접하게 연관된 클래스를 정의할 때 사용되며, 외부 클래스의 멤버(필드, 메서드 등)에 직접 접근할 수 있는 특성을 가짐
: 내부 클래스를 포함한 모든 중첩 클래스는 특정 클래스가 다른 하나의 클래스 안에서만 사용되거나, 둘이 아주 긴밀하게 연결되어 있는 특별한 경우에만 사용. 외부의 여러 클래스가 특정 중첩 클래스를 사용한다면 중첩 클래스로 만들면 안 됨.
논리적 그룹화 : 특정 클래스가 하나의 클래스 안에서만 사용되는 경우 해당 클래스를 안에 포함하는 것이 논리적으로 더 그룹화 됨. 패키지를 열었을 때 다른 곳에서 사용될 필요가 없는 중첩 클래스가 외부에 노출되지 않는다는 장점도 있음
캡슐화 : 중첩 클래스는 바깥 클래스의 private 멤버에 접근할 수 있음. 둘을 긴밀하게 연결하고 불필요한 public 메서드를 제거할 수 있음