Software/Java

[Java] Instance Variable (인스턴스 변수)와 Static Variable (클래스 변수)

TGnCo 2025. 1. 22. 08:54

Java

 

 

자바 Instance 변수와 Static 변수의 차이점

자바에서 Instance 변수Static 변수는 클래스 내에서 정의되지만, 그들의 특성과 사용 방식에는 중요한 차이가 있습니다. 이 글에서는 두 변수의 차이점과 각각의 특징을 자세히 설명하고, 이를 통해 자바의 객체 지향 프로그래밍에서 변수들이 어떻게 동작하는지 이해할 수 있도록 도와드리겠습니다.


1. Instance 변수란?

Instance 변수는 객체 인스턴스(인스턴스화된 클래스)마다 별도로 생성되는 변수입니다. 즉, 클래스의 각 객체가 독립적으로 가지고 있는 변수입니다. 인스턴스 변수는 객체를 생성할 때마다 메모리에 할당되며, 각 객체는 자신만의 인스턴스 변수를 가질 수 있습니다.

 

특징

  • 객체가 생성될 때마다 메모리에 할당된다.
  • 클래스의 각 인스턴스마다 별도의 값을 가질 수 있다.
  • 객체의 상태를 저장하는 데 사용된다.
  • 인스턴스 메소드에서 접근 가능하다.

 

예시 코드

class Car {
    // Instance 변수
    String color;
    int speed;

    // 생성자
    public Car(String color, int speed) {
        this.color = color;
        this.speed = speed;
    }

    public void displayInfo() {
        System.out.println("Color: " + color + ", Speed: " + speed);
    }
}

public class Main {
    public static void main(String[] args) {
        Car car1 = new Car("Red", 100);
        Car car2 = new Car("Blue", 120);

        car1.displayInfo();  // Color: Red, Speed: 100
        car2.displayInfo();  // Color: Blue, Speed: 120
    }
}

[위 예시에서 colorspeed는 인스턴스 변수입니다. car1car2는 각기 다른 값을 가지고 있죠.]


2. Static 변수란?

Static 변수는 클래스의 모든 객체가 공유하는 변수입니다. 즉, 클래스의 단 하나의 메모리 공간만 할당되고, 그 메모리 공간을 모든 객체가 공용으로 사용합니다. Static 변수는 클래스가 메모리에 로드될 때 초기화되며, 클래스의 객체가 여러 개 생성되더라도 값이 하나만 존재합니다.

 

특징

  • 클래스가 로드될 때 메모리에 할당된다.
  • 모든 객체가 동일한 값을 공유한다.
  • 클래스 이름을 통해서도 접근할 수 있다.
  • 주로 클래스 변수, 전역적 상태 정보를 저장하는 데 사용된다.

 

예시 코드

class Car {
    // Static 변수
    static int carCount = 0;

    // 생성자
    public Car() {
        carCount++;
    }

    public void displayInfo() {
        System.out.println("Total cars created: " + carCount);
    }
}

public class Main {
    public static void main(String[] args) {
        Car car1 = new Car();
        car1.displayInfo();  // Total cars created: 1

        Car car2 = new Car();
        car2.displayInfo();  // Total cars created: 2

        Car car3 = new Car();
        car3.displayInfo();  // Total cars created: 3
    }
}

[위 예시에서 carCount는 static 변수입니다. 모든 객체는 동일한 carCount 값을 공유하며, 새로운 객체가 생성될 때마다 이 값이 증가합니다.]


3. Instance 변수와 Static 변수의 차이점

구분 Instance 변수 Static 변수
생성 시점 객체가 생성될 때마다 생성된다. 클래스가 메모리에 로드될 때 한 번만 생성된다.
메모리 할당 각 객체마다 별도로 메모리 공간이 할당된다. 클래스 단 하나의 메모리 공간만 할당된다.
공유 여부 각 객체마다 고유한 값이 있다. 모든 객체가 동일한 값을 공유한다.
접근 방법 객체를 통해서만 접근 가능하다. 클래스명 또는 객체를 통해 접근할 수 있다.
사용 목적 객체의 상태를 나타내는 데 사용된다. 클래스 수준에서 공유할 데이터나 공통 정보를 저장하는 데 사용된다.

4. 언제 Static 변수를 사용할까?

Static 변수는 클래스의 모든 객체가 공통으로 사용할 필요가 있을 때 사용합니다. 예를 들어, 애플리케이션에서 전체적으로 공유되는 설정 값이나 객체의 생성 횟수를 추적할 때 유용합니다. Static 변수를 사용하는 주요 예시로는 싱글톤 패턴, 상수 등이 있습니다.


5. 결론

Instance 변수는 각 객체마다 고유한 상태 정보를 저장하는 데 사용되며, 객체의 특성에 맞는 데이터가 필요할 때 사용합니다.

Static 변수는 클래스의 모든 객체가 공유해야 하는 데이터를 저장하는 데 유용하며, 클래스 수준에서 공통 데이터를 관리할 때 사용됩니다.

각 변수의 특성과 차이를 이해하고 적절하게 활용하는 것이 자바 객체 지향 프로그래밍에서 중요한 요소입니다. 상황에 맞게 인스턴스 변수와 static 변수를 선택하여 효율적인 코드를 작성해 보세요!