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
멤버에 접근 가능하다.