멤버 변수(메서드 밖에서 선언된 변수)중 static이 붙은 것이 클래스 변수, 그렇지 않은것이 인스턴스 변수이다.
public class Test {
int instanceV; // 인스턴스 변수
static int classV; // 클래스 변수
void method() {
int stackV = 0; // 지역 변수
}
}
위 코드에서 instanceV 와 classV는 클래스 영역 안에 선언되어 있기에 멤버 변수이고, classV는 앞에 static이 선언되어 있기에 클래스 변수이고 instanceV는 인스턴스 변수이다. stackV는 메서드 내부에 선언되어 있기에 지역 변수이다.
인스턴스 변수: 클래스 영역에 선언되고 클래스의 인스턴스를 생성할 때 만들어짐> 인스턴스 변수의 값을 읽어오거나 저장하기 위해서는 인스턴스를 먼저 생성해야 됨
( Example example1 = new Example(); )
인스턴스는 서로 독립적인 저장공간을 가지고 있어서 서로 다른 값을 가질 수 있음, 인스턴스 마다 고유한 상태를 유지해야 되는 경우 인스턴스 변수로 선언함
클래스 변수: 인스턴스 변수 앞에 static 을 붙이면 됨. 클래스 변수는 모든 인스턴스가 공통된 저장공간(변수)을 공유하게 됨. 한 클래스의 모든 인스턴스들이 고유한 값을 유지해야 되는 속성의 경우 클래스 변수로 선언함. 클래스 변수는 인스턴스 변수와 달리 인스턴스를 생성하지 않아도 바로 사용 가능함.
( Example.변수이름 )
클래스가 메모리에 로딩될 때 생성되어 프로그램이 종료될 때까지 유지되고 public을 앞에 붙이면 같은 프로그램 내 어디서든지 접근이 가능한 전역 변수가 됨
지역 변수: 메서드 내에 선언되어서 메서드 내에서만 사용이 가능하고, 메서드가 종료되면 사라져 사용이 불가능하게 됨. 블럭 내(for문, if문 등...)에 선언된 지역 변수는 지역 변수가 선언된 블럭 안에서만 사용 가능하며, 블럭을 벗어나면 사라져서 사용 불가능 함.