변수는 한 개의 데이터를 담을 수 있는 공간이다.
java에서 변수는 어떤 데이터를 담는 지에 따라 기본형 타입 변수와 참조형타입 변수로 구분할 수 있고, 선언 위치에 따라 크게 클래스변수와 인스턴스변수, 지역변수 세가지로 나뉜다.
class Mycls{
static int a = 0; // 클래스 변수
int b = 1; // 인스턴스 변수
void printAB(){
int c = 2; // 지역변수
System.out.println(a); // 출력 : 0
System.out.println(b); // 출력 : 1
System.out.println(c); // 출력 : 2
}
}
클래스 내부에서 static으로 선언된 변수. 인스턴스가 각자 갖고 있지 않고 모든 인스턴스가 클래스 변수의 저장공간을 공유한다.
클래스명.클래스변수 형식으로 사용한다.클래스 내부에서 선언되어 각 인스턴스 내부에 존재한다.
클래스 변수와 차이점은 인스턴스를 생성하면 같이 생성되고 인스턴스의 내부에 존재한다는 것이다.
인스턴스는 각자 인스턴스 변수를 가지기 때문에 서로 다른 값을 가질 수 있다. 인스턴스 생성할 때마다 새로운 인스턴스 변수가 생성된다.
메서드 내에서 선언된 변수.
메서드가 호출되어 메서드 내부에서 선언될 때 생성되었다가 메서드가 끝나면 지역변수도 같이 사라진다. 메서드 내에서만 사용이 가능하다.
만약 지역변수와 다른 변수의 이름이 같은 경우 메서드 내부에서는 지역변수가 인정된다. 지역변수의 우선순위가 더 높다.
클래스 변수와 인스턴스 변수를 합쳐 멤버 변수라고도 부른다.
| 클래스변수 | 인스턴스 변수 | 지역변수 | |
|---|---|---|---|
| 선언위치 | 클래스 | 클래스 | 매서드 |
| 생성 | 클래스가 로딩 됐을 때 | 인스턴스가 생성 됐을 때 | 변수가 선언 됐을 때 |
| 소멸 | 프로그램 종료 | 인스턴스 삭제 | 메서드 종료 |
참고 자료