공부/Java

인스턴스 변수와 클래스 변수

동곤영 2022. 6. 12. 16:43

인스턴스 변수와 클래스 변수에 대해 포스팅 한다.

 

변수는 클래스변수, 인스턴스변수, 지역변수 모두 세 종류가 있다.

 

멤버변수를 제외한 나머지 변수들은 모두 지역변수이며,

 

멤버변수 중 static이 붙은 것은 클래스변수이고 붙지 않은 것은 인스턴스변수 이다.

 

 

class Variables {
	/* 클래스 영역 */
	int iv;  	// 인스턴스 변수
    	static int cv; 	// 클래스 변수 (static 변수, 공유 변수)
    
    void method() {
    	/* 메소드 영역 */
    	int iv = 0; // 지역변수
    }
}
변수의 종류 선언위치 생성시기
클래스 변수
(class variable)
클래스 영역 클래스가 메모리에 올라갈 때
인스턴스 변수
(instance variable)
인스턴스가 생성되었을 때
지역 변수
(local variable)
클래스 영역 이외의 영역
(메소드, 생성자, 초기화 블럭 내부)
변수 선언문이 수행되었을 때

 

1. 인스턴스 변수 (instance variable)

클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어진다. 그렇기 때문에 인스턴스 변수의 값을 읽어 오거나

저장하기 위해서는 먼저 인스턴스를 생성해야한다. 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다. 인스턴스마다 고유한 상태를 유지해야하는 속성의 경우, 인스턴스변수로 선언한다.

 

2. 클래스 변수 (class variable)

클래스 변수를 선언하는 방법은 인스턴스 변수 앞에 static을 붙이기만 하면 된다. 인스턴스마다 독립적인 저장공간을 갖는 인스턴스 변수와는 달리, 클래스 변수는 모든 인스턴스가 공통된 저장공간(변수)을 공유하게 한다. 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하 하는 속성의 경우, 클래스 변수로 선언해야 한다.

 

3. 지역변수 (local variable)

메소드 내에 선언되어 메소드 내에서만 사용 가능하며, 메소드가 종료되면 소멸되어 사용 할 수 없게 된다.

 

출처 : JAVA의 정석 남궁 성 지음