클래스를 사용하면서 외부 인스턴스에 대한 참조가 필요없는 클래스를 선언 시
"Inner class may be static'이라는 경고가 떠서 알아봄
자바는 일반 클래스를 제외하고 일반적으로 클래스의 중첩을 이렇게 나눈다.
패키지가 되는 클래스가 아닌 나머지 클래스
하나의 패키지에 대해 여러 클래스를 사용할 수 있고, 서로간 결합만이 존재하는 클래스의 경우 가독성이 좋고 관리하기 편하다.
클래스가 다른 클래스에만 유용 할 경우 해당 클래스에 클래스를 포함시키고 두 클래스를 함께 유지하는 것이 논리적입니다. 이러한 "헬퍼 클래스"를 중첩하면 패키지가 더욱 간소화됩니다.
중첩 클래스들은 패키지 클래스 내부에 숨겨져있으므로 캡슐화에 도움이 된다.
A와 B라는 두 가지 최상위 클래스를 고려하십시오. 여기서 B는 선언 될 A의 멤버에 액세스해야합니다. 클래스 A 내에 클래스 B를 숨기면 A의 구성원을 비공개로 선언하고 B가 액세스 할 수 있습니다. 또한 B 자체는 외부 세계에서 숨길 수 있습니다.
public class Outer {
class Inner {
}
}
Outer outer = new Outer();
Outer.Inner inner = new Outer.new Inner();
public class Outer {
static class staticNasted {
}
}
Outer.Inner staticNasted = new Outer.Inner();
외부 참조로 인한 기능들 사용하지 못함에도 IDE에서 내부 클래스를 static으로 만들라고 하는 이유는 다음과 같다.
결국 외부 인스턴스에 대한 참조가 필요하지 않다면 static nested class로 만드는 것이 낫다.
중첩 클래스를 알아보자
Inner class vs Inner Static class
Oracle Java Tutorial
[Effective Java 3/E 멤버클래스는 가능하면 static으로 선언하라]
non-static nested class 예시에서 잘못된 부분이 있습니다.
Outer.Inner inner = new Outer.Inner();
=> Outer.Inner inner = new Outer.new Inner(); 로 수정이 필요할 것 같네요