static
으로 선언되지 않는 내부 클래스에는 외부 클래스에 대한 참조가 있으며 외부 클래스의 필드 및 메서드에 대한 액세스 권한을 갖는다는 특징이 있습니다.
이런 타입의 클래스 참조는 내부 클래스의 덩치를 키우고, 외부 클래스 인스턴스가 필요 이상으로 메모리에 오래 저장되게 만들 수 있습니다.
외부 클래스에 대한 참조가 사용되지 않는 경우, static
내부 클래스로 (nested
(중첩)이라고도 불림) 만드는 것이 더 효율적입니다.
참조가 클래스 생성자에서만 사용된다면 클래스 참조를 명시적으로 생성자에게 전달합니다.
내부 클래스가 익명인 경우 이름을 지정하는 것이 좋습니다.
이렇게 말하면 항상 nested
/static
클래스가 더 효율적인 것 처럼 들리지만, 일반 내부 클래스
와 중첩된 내부 클래스
사이에는 의미론적 차이가 있습니다.
일반 내부 클래스
는 외부 클래스의 인스턴스 컨텍스트 내에서만 인스턴스화 될 수 있다는 의미입니다.
중첩 내부 클래스
는 외부 클래스와 독립적으로 인스턴스화 될 수 있다는 의미입니다.
규칙을 어긴 코드
public class Fruit {
// ...
public class Seed { // 규칙을 어긴 코드; 외부 클래스 참조를 사용하지 않으므로 static으로 만들어야 합니다.
int germinationDays = 0;
public Seed(int germinationDays) {
this.germinationDays = germinationDays;
}
public int getGerminationDays() {
return germinationDays;
}
}
}
규칙을 준수한 해결책
public class Fruit {
// ...
public static class Seed {
int germinationDays = 0;
public Seed(int germinationDays) {
this.germinationDays = germinationDays;
}
public int getGerminationDays() {
return germinationDays;
}
}
}
If you like SONARKUBE, don’t forget to give me a star.