클래스 내부에서 변수를 선언하는 위치와 방법에 따라서 변수의 종류가 변경된다.
아래 코드를 기반으로 설명해보면,
class Variables
{
//// 클래스 영역 Start ////
int instanceVariable; // 인스턴스 변수
static int classVariable; // 클래스변수(static변수, 공유변수)
///// 메서드 영역 Start ////
void method() {
int localVariable = 0; //지역변수
}
///// 메서드 영역 End ////
//// 클래스 영역 End ////
}
우선 1. 클래스 영역 2. 메서드 영역 두가지로 분리될 수 있다.
1. 클래스 영역
- 클래스 시작부터 끝까지이다.
- 해당 영역에서는 선언문만 가능하다.
- 클래스 영역에 선언되는 변수에는 인스턴스 변수와 static변수가 있다.
- 인스턴스 변수: 인스턴스가 생성되었을 때 생성된다.
- 보통 개별적인 속성을 가질때 사용.
- 클래스 변수(static변수) : 인스턴스 변수 선언방식 앞에 static을 붙여서 선언할 수 있다.
클래스가 메모리에 올라갔을 때 생성된다. (객체 생성이 필요없다.)
(cpu가 메모리에서 데이터를 쓸 때. -> 클래스가 메모리에 올라갈때 생성되기에 객체 생성 필요x)- 보통 공통적인 속성을 가질 때 사용.
- static 변수의공유 개념 덕분에 생성시기가 틀린 이유가 있으며, 이 공유개념 덕분에 static변수를 많이 사용하기도 한다.
- 때문에, 인스턴스 변수는 객체가 생성이 되어야 생성되는 반면 static변수는 클래스가 RAM에 올라갔을 때 생성되기 때문에 객체 생성이 필요없다.
- 인스턴스 변수: 인스턴스가 생성되었을 때 생성된다.
2. 메서드 영역
- 메서드 시작부터 끝까지이다.
- 메서드 영역 내부에서 선언되는 변수는 지역변수이다.
- 지역변수: 변수 선언문이 수행되었을 때 생성된다.
'JAVA' 카테고리의 다른 글
8. 호출스택 (0) | 2022.09.18 |
---|---|
7. static 변수와 instance변수 (0) | 2022.09.17 |
5. 클래스의 정의 (0) | 2022.09.17 |
4. 객체배열 (0) | 2022.09.17 |
3. 클래스 파일 관리는? (0) | 2022.09.04 |