CodeGym /Java Blog /무작위의 /Java의 정적 변수
John Squirrels
레벨 41
San Francisco

Java의 정적 변수

무작위의 그룹에 게시되었습니다

정적 변수란 무엇입니까?

정적 변수 또는 클래스 변수는 클래스의 모든 인스턴스에서 공유되며 클래스의 인스턴스를 만들지 않고도 액세스하고 수정할 수 있습니다. Java에서 정적 변수 의 사용과 구현을 이해하기 위해 심층적으로 살펴보겠습니다 .

Java의 정적 변수 예

정적 변수 의 가장 일반적인 용도 중 하나는 클래스의 모든 인스턴스 간에 공유하는 것입니다. 예를 들어 생성된 인스턴스 수를 추적하는 카운터 변수 또는 절대 변경되지 않는 값을 보유하는 CONSTANT 변수가 있습니다. 은행 계좌를 나타내는 클래스를 생각해 보세요. 다음 코드 조각은 정적 변수 nextAccountNumber를 사용하여 각각의 새 계정에 고유한 계정 번호를 할당하는 방법을 보여줍니다.


// BankAccount class definition
class BankAccount {
  // Declare static variable nextAccountNumber 
  static int nextAccountNumber = 1001;

  // Declare instance variables for accountNumber and balance.
  int accountNumber;
  double balance;

  // BankAccount constructor that assigns unique account number to each instance
  BankAccount() {
    // Assign the current value of nextAccountNumber to accountNumber.
    accountNumber = nextAccountNumber;

    // Increment nextAccountNumber for the next BankAccount object.
    nextAccountNumber++;
  }

  // Method to get the account number of this BankAccount object.
  int getAccountNumber() {
    return accountNumber;
  }

  // Method to get the balance of this BankAccount object.
  double getBalance() {
    return balance;
  }

  // Method to deposit an amount into this BankAccount object.
  void deposit(double amount) {
    // Increase balance by the amount deposited.
    balance += amount;
  }

  // Method to withdraw an amount from this BankAccount object.
  void withdraw(double amount) {
    // Decrease balance by the amount withdrawn.
    balance -= amount;
  }
}

// Main method definition
class Main {
  static void main(String[] args) {
    // Create three BankAccount objects: account1, account2, and account3.
    BankAccount account1 = new BankAccount();
    BankAccount account2 = new BankAccount();
    BankAccount account3 = new BankAccount();
    
    // Display the value of the static variable nextAccountNumber after creating each BankAccount object.
    System.out.println("Value of nextAccountNumber after creating account1: " + account1.getAccountNumber());
    System.out.println("Value of nextAccountNumber after creating account2: " + account2.getAccountNumber());
    System.out.println("Value of nextAccountNumber after creating account3: " + account3.getAccountNumber());
  }
}

산출

account1 생성 후 nextAccountNumber 값: 1001 account2 생성 후 nextAccountNumber 값: 1002 account3 생성 후 nextAccountNumber 값: 1003
이 예제에서 기본 메서드는 BankAccount 클래스의 인스턴스 3개를 만듭니다. BankAccount 생성자는 nextAccountNumber를 새 계좌에 할당 하고 nextAccountNumber 변수를 1씩 증가시킵니다 . getAccountNumber 메소드는 각 계좌의 계좌 번호를 반환합니다. 그런 다음 기본 메소드는 각 계정에 대한 계좌 번호와 nextAccountNumber 변수를 인쇄합니다. 각 계좌 번호는 고유하며 nextAccountNumber 변수는 생성된 새 계좌마다 1씩 증가하는 것을 볼 수 있습니다 . 정적 변수는 클래스 인스턴스를 하나만 만들 수 있는 싱글톤 디자인 패턴을 구현하는 데에도 사용할 수 있습니다. 싱글톤 클래스는 Java 애플리케이션에서 하나의 인스턴스만 가질 수 있으며 동시에 이 인스턴스에 대한 전역 액세스 지점을 제공하는 클래스입니다 . 다음 코드 조각은 정적 변수 인스턴스를 사용하여 싱글톤 클래스를 구현하는 방법을 보여줍니다.


public class Singleton {
    // using static variable in the singleton class
    private static Singleton instance;
    private Singleton() { }

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }

    public void displayMessage() {
        System.out.println("This is a singleton class");
    }

    public static void main(String[] args) {
        Singleton singleton1 = Singleton.getInstance();
        singleton1.displayMessage();

        Singleton singleton2 = Singleton.getInstance();
        singleton2.displayMessage();

        Singleton singleton3 = Singleton.getInstance();
        singleton3.displayMessage();
    }
}

산출

이것은 싱글톤 클래스입니다 이것은 싱글톤 클래스입니다 이것은 싱글톤 클래스입니다
이 예제에서 기본 메소드는 getInstance() 메소드를 호출하여 Singleton 클래스 의 인스턴스 3개를 생성합니다 . getInstance () 메서드는 클래스의 인스턴스를 반환하고 인스턴스가 없으면 새 인스턴스를 만듭니다. displayMessage 메소드 단지 메시지를 인쇄합니다. 그런 다음 기본 메서드는 각 인스턴스에 대해 displayMessage 메서드를 호출합니다 . 보시다시피, 세 개의 인스턴스를 생성하더라도 하나의 객체만 생성되어 모든 인스턴스에서 공유됩니다. 이는 클래스의 인스턴스가 하나만 생성되어 모든 인스턴스 간에 공유되며 정적 변수 'instance'가 보유하고 있음을 증명합니다. 정적 변수 의 값은 클래스의 모든 인스턴스에서 공유되므로 한 인스턴스에서 변경한 변수가 다른 모든 인스턴스에서도 표시된다는 점을 기억하는 것이 중요합니다. 코드에서 잠재적인 충돌과 버그를 방지하려면 정적 변수를 신중하게 고려해야 합니다. 예를 들어 계정 잔액과 같이 클래스 인스턴스에 특정한 값을 보유하기 위해 정적 변수를 사용하는 것은 권장되지 않습니다. 배운 내용을 강화하려면 Java 과정의 비디오 강의를 시청하는 것이 좋습니다.

결론

이를 마무리하기 위해 Java의 정적 변수를 사용하면 클래스의 모든 인스턴스 간에 데이터를 공유할 수 있습니다. 카운터, 상수 등 모든 인스턴스 간에 공유되는 변수에 사용하거나 싱글톤 디자인 패턴을 구현하는 데 사용할 수 있습니다. 그러나 정적 변수의 값은 클래스의 모든 인스턴스에서 공유되므로 한 인스턴스에서 변경한 변수가 다른 모든 인스턴스에 표시된다는 점을 기억하는 것이 중요합니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION