
Java에서의 Nested Class를 알아보며, 어떻게 변화해 왔을지 한번 생각해보자.
public class OuterClass {
...
class InnerClass {
...
}
}
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
InnerClass는 static 멤버를 선언할 수 없다.InnerClass는 OuterClass 인스턴스와 함께 OuterClass의 내부에 존재한다.OuterClass의 모든 변수에 접근할 수 있다.OuterClass 인스턴스와 연결되어 있다.InnerClass 생성을 위해서는 먼저 외부 클래스 객체를 생성해야 한다.public class LocalClassExample {
public void methodExample() {
class LocalClass {
public static final int MAX = 10;
public static final String F = "female";
}
}
}
LocalClass는 static 멤버를 선언할 수 없다.final static은 가능하다.LocalClassExample 등button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
...
}
}
class OuterClass {
private final int age;
static class StaticNestedClass {
private final OuterClass outer;
int getAge() {
return this.age; // 불가능! - non-static 가능
return this.outer.age; // 가능!
}
}
}
OuterClass.InnerClass innerClass = new OuterClass.InnterClass();
static과 함께 선언된다.static이기 때문에 클래스 로딩 시점에 한번만 호출된다.static의 의미는 정적 멤버 함수, 변수의 의미가 아니다.static class의 의미도 아니다.private 변수에는 접근이 가능하나, 직접 접근은 안된다.static 변수는 가능하다.static 사용 안했을 시에는 컴파일러가 이 작업을 해줬던 것이 전부다.private 멤버에 접근 가능하다.