내부 클래스를 소유하고 있는 클래스를 참조하지 않는 클래스는 "static"으로 선언되어야 합니다

 

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. :star2:

원문으로 바로가기

Star This Project