Written by
TY_K
on
on
Java Nested Class
Nested Class
- 한 곳에서만 사용되는 클래스를 논리적으로 묶어서 처리할 필요가 있을 때 → Static Nested 클래스 사용
-
캡슐화가 필요할 때. 즉, 내부 구현을 감추고 싶을 때 → inner 클래스 사용
예를 들어 A라는 클래스에 private 변수가 있다. 이 변수에 접근하고 싶은 B라는 클래스를 선언하고, B 클래스를 외부에 노출시키고 싶지 않을 경우
- Static nested 클래스, inner 클래스 차이는 static 여부이다.
Static Nested Class
public class OuterOfStatic{
static class StaticNested {
private int value = 0;
public int getValue() {
return value;
}
public void setValue(int value){
this.value=value;
}
}
}
public class NestedSample{
public static void main(String[] args){
NestedSample sample = new NestedSample();
sample.makeStaticNestedObject();
}
public void makeStaticNestedObject(){
OuterOfStatic.StaticNested staticNested = new OuterOfStatic.StaticNested();
staticNested.setValue(3);
System.out.println(staticNested.getValue());
}
}
- Static Nested 클래스를 만들었을 때 객체 생성은 감싸고 있는 클래스 이름 뒤에 .을 찍고 쓰면된다.
Inner Class
public class OuterOfInner {
class Inner {
private int value = 0;
public int getValue() {
return value
}
public void setValue(int value){
this.value=value;
}
}
}
public class InnerSample{
public static void main(String[] args){
InnerSample sample = new InnerSample();
sample.makeInnerObject();
}
public void makeInnerObject(){
OuterOfInner outer = new OuterOfInner();
OuterOfInner.Inner inner = outer.new Inner();
inner.setValue(3);
System.out.println(inner.getValue());
}
}
- Inner클래스의 객체를 만들기 위해서 먼저 Inner 클래스를 감싸고 있는 클래스의 객체를 만들어야한다.
자바파일 한개당 public 클래스는 하나만 가질수 있고 그 클래스는 파일명이랑 똑같은 클래스 여야된다.
example.java라는 파일이 있다고 하면
class example{
}
public class example2{
}
이렇게 하면 컴파일이 안된다.
public class example{
}
class example2{
}
이렇게 바꾸면 컴파일이 된다.
원문링크
자바의 신 16장 - 클래스 안에 클래스가 들어갈 수도 있구나