Java에서 정적이란 무엇을 의미합니까

Rashmi Patidar 2023년10월12일
  1. Java에서 멤버 변수와 함께static키워드 사용
  2. Java에서 멤버 함수와 함께static키워드 사용
  3. Java의 블록에서static키워드 사용
Java에서 정적이란 무엇을 의미합니까

Java 언어에서static은 다양한 위치에서 사용할 수있는 키워드입니다. static키워드는 멤버 변수, 멤버 함수, 블록 및 중첩 클래스와 함께 사용됩니다. 정적 키워드의 적용은 매번 새 인스턴스를 만들고 싶지 않은 곳입니다. 대신 클래스 내에서 단일 사본이 공유되는 장소에서 사용합니다. 정적 변수는 영구 메모리의 한 유형 인 힙 메모리에 저장됩니다.

Java에서 멤버 변수와 함께static키워드 사용

코드 블록은 정적 변수가 비 정적 변수와 어떻게 다른지 설명합니다.

public class StaticVariableUsage {
  public static void main(String[] args) {
    InnerClass in = new InnerClass();
    InnerClass in1 = new InnerClass();

    InnerClass2 in2 = new InnerClass2();
    InnerClass2 in3 = new InnerClass2();
  }

  static class InnerClass {
    static int var4 = 0;
    InnerClass() {
      var4++;
      System.out.println("static variable : " + var4);
    }
  }

  static class InnerClass2 {
    int var5 = 0;
    InnerClass2() {
      var5++;
      System.out.println("non-static variable : " + var5);
    }
  }
}

위 코드 블록에는StaticVariableUsage클래스라는 이름의 공용 클래스가 있습니다. 하나의 정적 메서드와 두 개의 내부 클래스가 있습니다. InnerClass라는 내부 클래스에는 정적 정수 변수var4가 있으며 0으로 시작됩니다. 클래스에는 정적 정수 변수를 증가시키고 그 값을 인쇄하는 생성자가 있습니다.

또 다른 내부 클래스는InnerClass2라는 이름을 가지며 비 정적 변수var5를 보유합니다. 이 클래스에는 비 정적 변수를 증가시키고 그 값을 인쇄하는 생성자도 있습니다.

main메소드로 이동하면 여기서InnerClassInnerClass2가 두 번 인스턴스화됩니다. 생성자 호출이 발생하면 분석이 파생 될 수 있습니다. 객체가 새 키워드로 인스턴스화됩니다.

출력에서 알 수 있듯이 정적 변수가 시작되고 보존됩니다. 값이 처음으로 증가하고 값을1로 인쇄합니다. 다음에 다른 인스턴스를 만들 때 생성자가 다시 호출됩니다. 그러나 정적 변수는 다시 0으로 다시 초기화되지 않습니다. 대신 이전에 저장된 값이 증가하여 정적 변수 값이 2가됩니다.

마찬가지로InnerClass2인스턴스가 생성 될 때마다 비 정적 변수가0값으로 초기화됩니다. 따라서 두 번 모두 출력에서1로 값을 인쇄합니다.

static variable : 1
static variable : 2
non-static variable : 1
non-static variable : 1

Java에서 멤버 함수와 함께static키워드 사용

아래 클래스의 다른 내부 클래스를 보유하는StaticFunctionUsage클래스라는 외부 클래스가 있습니다. InnerClass에는 정적 함수가 있습니다. 그리고InnerClass1이라는 또 다른 내부 클래스에는 비 정적 메서드가 있습니다.

이제main메소드로 이동하면 클래스 이름으로 정적 함수에 직접 액세스 할 수 있음을 알 수 있습니다. InnerClass개체를 인스턴스화 할 필요가 없습니다. 마찬가지로, 클래스 이름으로 비 정적 함수function1에 액세스하려고하면 컴파일 타임 오류가 발생합니다. 함수에 액세스하려면in변수라는 이름으로 만든 클래스 인스턴스를 만들어야합니다. 변수의 사용은function1을 호출하는 것이며 유효한 명령문입니다.

public class StaticFunctionUsage {
  public static void main(String[] args) {
    InnerClass.function();
    // InnerClass1.function1();
    InnerClass1 in = new InnerClass1();
    in.function1();
  }

  static class InnerClass {
    static void function() {
      System.out.println("In the static function");
    }
  }

  static class InnerClass1 {
    void function1() {
      System.out.println("In the non-static function");
    }
  }
}

위 코드 블록의 출력은 다음과 같습니다.

In the static function
In the non-static function

Java의 블록에서static키워드 사용

정적 블록의 사용은 정적 변수를 초기화하는 것입니다. 프로그램 실행은main메소드로 시작됩니다. 정적 블록이 클래스 내에 있으면 기본 메서드 실행 전에 실행됩니다.

다음은 정적 블록을 설명하는 코드입니다.

public class StaticBlock {
  static {
    System.out.println("In the static block");
  }

  public static void main(String[] args) {
    System.out.println("In the main method");
  }
}

코드의 출력은 다음과 같습니다. 보시다시피 정적 블록의 문이 먼저 실행됩니다.

In the static block
In the main method
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