[Java] 정적 변수(static)와 인스턴스(instance) 변수

SeoYoon·2024년 11월 10일

💗JAVA

목록 보기
12/21

1. 정적 변수(static variable)

  • 클래스에 속함 : 정적 변수는 클래스에 속하는 변수로, 해당 클래스의 모든 인스턴스가 공유함
  • 메모리 할당 : 프로그램이 시작될 때 클래스가 메모리에 로드되면 한 번만 메모리에 할당됨
  • 접근 방법 : 클래스명.변수명 or 인스턴스.변수명으로 접근할 수 있지만 보통 클래스명.변수명 형식으로 접근함
  • 변경 시 모든 인스턴스에 영향 : 정적 변수의 값을 변경하면 모든 인스턴스에 동일하게 적용됨

1-2. 예시 코드

Class MyClass {
static int staticVar = 0; // 정적 변수

	void increment() {
		staticVar++;
	}
    
    public static void main(String[] atgs) {
    	MyClass obj1 = new MyClass();
        
        obj1=increment();
        obj2=increment();
        
        System.out.println(MyClass.staticVar); // 출력 : 2
    }
}
  • staticVar는 클래스에 속하며 obj1obj2가 공유한다. 두 인스턴스에서 값을 증가시키면 공유된 변수이므로 최종 값은 2가 된다.


2. 인스턴스 변수(Instance Variable)

  • 인스턴스에 속함 : 인스턴스 변수는 각 인스턴스에 속하는 변수로, 인스턴스가 생성될 때마다 별도로 할당됨
  • 메모리 할당 : 인스턴스가 생성될 때마다 메모리에 할당되며, 인스턴스가 소멸되면 해제됨
  • 접근 방법 : 인스턴스명.변수명으로 접근
  • 변경 시 해당 인스턴스에만 영향 : 인스턴스 변수의 값을 변경해도 해당 인스턴스에만 적용됨

2-1. 예시 코드

Class MyClass {
	int instanceVar = 0;
    
    void increment() {
    	instanceVar++;
    }
    
    public static void main(String[] args) {
    MyClass obj1 = new MyClass();
    MyClass obj2 = new MyClass();
    
    obj1.increment();
    obj2.increment();
    
    System.out.println("obj1의 instanceVar : " + obj1.instanceVar); // 출력 : 1
    System.out.println("obj2의 instanceVar : " + obj2.instanceVar); // 출력 : 1
    
    }
}
  • instanceVar는 각 인스턴스에 속하므로 obj1obj2가 각각 독립적으로 값을 가진다.


3. 정리

구분정적 변수(static Variable)인스턴스 변수(Instance Variable)
소속클래스인스턴스
메모리 할당 시점클래스 로딩 시인스턴스 생성 시
접근 방법클래스명.변수명 or 인스턴스명.변수명인스턴스명.변수명
변경 시 영향 범위모든 인스턴스해당 인스턴스
예시My.Class.staticVarobj1.instanceVar
profile
공부 기록

0개의 댓글