Java의 정적 클래스

Rashmi Patidar 2023년10월12일
Java의 정적 클래스

Java 언어에서는 외부 클래스를 정적 ​​클래스로 만들 수 없지만 중첩 된 내부 클래스를 정적 ​​클래스로 만들 수있는 권한이 있습니다. 정적 클래스의 속성은 다음과 같습니다.

정적 내부 클래스는 외부 클래스의 비 정적 멤버에 액세스 할 수 없습니다.

정적 내부 클래스는 멤버 변수에 액세스하기 위해 외부 클래스 참조가 필요하지 않습니다.

정적 클래스는 인스턴스화 될 수 없습니다. 따라서 메서드는 클래스 이름으로 직접 액세스 할 수 있습니다.

아래는 위의 두 줄을 보여주는 코드입니다.

package static_class;

public class StaticInnerClass {
  static int i = 1;
  int j = 9;

  public static void main(String[] args) {
    StaticInnerClass s = new StaticInnerClass();
    // s.InnerClass.printNum();
    InnerClass.printNum();
  }

  public static class InnerClass {
    public static void printNum() {
      System.out.println(i);
      // System.out.println(j);
    }
  }
}

위의 코드에서StaticInnerClass이름으로 외부 클래스를 생성했습니다. 이 클래스에는 정적 필드, 비 정적 필드, 정적 메서드 및 정적 내부 클래스가 있습니다. 정적 메인 메서드에서s객체라는 외부 클래스의 인스턴스를 만들었습니다. 외부 클래스 객체, 즉s.InnerClass.printNum();을 사용하여 내부 클래스printNum()메서드에 액세스하려고 할 때 IDE는 컴파일 타임 오류를 제공하는데, 이는 정적 내부 클래스가 내부 클래스 메서드에 액세스하기 위해 외부 클래스 참조 개체에 대한 참조가 필요하지 않음을 나타냅니다. 따라서 클래스 이름으로 내부 클래스 메서드에 직접 액세스 할 수 있습니다.

이제printNum()메소드의 정의를 볼 수 있습니다. 두 개의 print 문이 있습니다. 첫 번째는 외부 클래스의 정적 필드를 인쇄하고 두 번째는 동일한 비 정적 변수를 인쇄하려고합니다. System.out.println(i);문 이는 정적 컨텍스트에서만 정적 멤버에 액세스 할 수 있음을 의미합니다. 그러나 두 번째 문인System.out.println(j);를 살펴 보겠습니다. 정적 컨텍스트에서 비 정적 멤버에 액세스 할 수 없으므로 유효하지 않습니다.

Java 클래스에서는 외부 클래스static클래스를 작성할 수 없습니다. 그러나 일부 정의 된 키워드를 사용하여 동작을 모방 할 수 있습니다.

final키워드의 사용은 클래스를 최종적으로 만드는 것입니다. 이 키워드는 클래스가 더 이상 확장되는 것을 금지합니다. 그 이유는 정적 클래스의 확장에 사용되지 않기 때문입니다.

정적 클래스의 인스턴스화를 방지하므로private키워드를 사용하여 생성자를 비공개로 만듭니다. 정적 클래스의 속성에서 알 수 있듯이 인스턴스화 할 수 없습니다.

멤버 변수 및 멤버 메서드와 함께static키워드를 사용합니다. 객체가 생성되지 않으므로 비 정적 멤버 필드 및 함수에 액세스 할 수 없습니다.

아래는 정의 된 정적 클래스이며이 클래스의 객체 생성이 필요하지 않은Utility클래스를 만드는 데 사용됩니다.

package static_class;

public final class StaticClass {
  private static int a = 1;

  private StaticClass() {
    System.out.println("Cannot be instantiated");
  }

  public static void printNum() {
    System.out.println(a);
  }
}
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

관련 문장 - Java Class