
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);
}
}
staticVar는 클래스에 속하며 obj1과 obj2가 공유한다. 두 인스턴스에서 값을 증가시키면 공유된 변수이므로 최종 값은 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);
System.out.println("obj2의 instanceVar : " + obj2.instanceVar);
}
}
instanceVar는 각 인스턴스에 속하므로 obj1과 obj2가 각각 독립적으로 값을 가진다.
3. 정리
| 구분 | 정적 변수(static Variable) | 인스턴스 변수(Instance Variable) |
|---|
| 소속 | 클래스 | 인스턴스 |
| 메모리 할당 시점 | 클래스 로딩 시 | 인스턴스 생성 시 |
| 접근 방법 | 클래스명.변수명 or 인스턴스명.변수명 | 인스턴스명.변수명 |
| 변경 시 영향 범위 | 모든 인스턴스 | 해당 인스턴스 |
| 예시 | My.Class.staticVar | obj1.instanceVar |