변수의 종류

클래스 변수 : static
- static 지시자를 붙임
- 클래스가 메모리에 로딩될 때 생성
- JVM 메모리 영역 중 method 영역에 로드
- 모든 클래스의 객체가 공통된 변수를 공유
- 이미 메모리에 올라가 있기 때문에 클래스의 객체를 생성하지 않고도 사용 가능
인스턴스 변수
- 클래스의 객체를 생성할 때 생성
- JVM 메모리 영역중 Heap 영역에 로드
- 클래스의 객체마다 독립적인 값을 가짐
지역 변수
- 블럭 내부에서 변수 선언문이 실행되었을 때 생성
- 블럭이 종료되면 소멸
- JVM 메모리 영역중 Heap 영역에 로드
class Calculator {
// 1. 클래스 변수 - 원주율
static double PI = 3.14;
// 2. 인스턴스 변수 - 반지름
double radius = 0;
public double getAreaOfCircle() {
// 3. 지역 변수
double result = this.PI * this.radius * this.radius;
return result;
}
// 생성자 - 반지름을 넣어줍니다.
Calculator(int radius) {
this.radius = radius;
}
}
주의사항
- 모든 변수를 Static으로 선언할 경우, Garbage Collector가 주기적으로 런타임시 Heap 영역에 동적으로 할당된 객체들을 해제하는데 Static으로 선언하게 되면 Method 영역에만 정보가 있어서 이미 점유하고 있는 메모리를 줄일수가 없다.
- 따라서 정말 필요한 데이터만 static을 붙여서 클래스 변수로 선언하자.