변수는 클래스변수, 인스턴스 변수, 지역 변수 총 세 종류가 있다.
변수의 종류를 결정짓는 중요한 요소는 '변수의 선언된 위치'이므로 변수가 어느 영역에 선언되었는지를 확인하는 것이 중요하다. 멤버 변수를 제외한 나머지 변수들은 모두 지역변수이며, 멤버 변수 중 static이 붙은 것은 클래스 변수, 붙지 않은 것은 인스턴스 변수이다.
class Variables {
int iv; // 인스턴스 변수
static int cv; // 클래스 변수(static변수, 공유변수)
void method() {
int lv = 0; // 지역 변수
}
}
인스턴스 변수(instance variable)
- 클래스 영역에 선언.
- 클래스의 인스턴스를 생성할 때 만들어짐.
- 인스턴스 변수의 값을 읽어 오거나 저장하기 위해서 인스턴스 생성 필요.
- 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있음.
- 인스턴스마다 고유한 상태를 유지해야하는 속성의 경우에 선언.
클래스 변수(class variable)
- 인스턴스 변수 앞에 static을 붙여서 선언하면 클래스 변수.
- 클래스 영역에 선언.
- 모든 인스턴스가 공통된 저장공간을 공유.
- 한 클래스의 모든 인스턴스들이 공통값을 유지해야 하는 경우에 선언.
- 인스턴스를 생성하지 않고 바로 사용 가능.
'클래스이름.클래스변수' - 클래스가 메모리에 로딩될 때 생성되어 프로그램이 종료될 때까지 유지.
- static 앞에 public을 붙이면 '전역 변수'의 성격을 가지게 됨.
지역 변수(local variable)
- 메서드 내에 선언되어 메서드 내에서만 사용 가능.
- 메서드가 종료되면 소멸되어 사용불가.
인스턴스 변수는 인스턴스가 생성될 때마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있지만,
클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하므로, 항상 공통된 값을 갖는다.