static 변수 정리
<aside>
♨️
멤버 변수(필드) 종류
- 인스턴스 변수
- static이 붙지 않은 멤버 변수
- 인스턴스를 만들 때 마다 새로 생성
- 앞 예제에서 count 증가 시 계속 0 → 1을 반복하는 것을 확인 가능
- 클래스 변수
- static이 붙은 멤버 변수
- 해당 명칭은 클래스 변수, 정적 변수, static 변수 등 다양하게 부름
- 프로그램 실행 시 딱 1개만 생성, 인스턴스와 다르게 여러 곳에서 공유
- 앞 예제에서 count 증가 시 0 → 1 → 2 → 3 증가 확인 가능
</aside>
<aside>
🎫
예제
package static1;
public class test {
public static void main(String[] args) {
Data3 data = new Data3("D");
System.out.println(data.count); //인스턴스 접근
System.out.println(Data3.count); //클래스 접근
}
}
- static으로 지정된 클래스 변수는 인스턴스 접근, 클래스 접근 둘 다 가능
변수 종류
<aside>
⛱️
지역 변수(매개변수 포함
- 스택 영역에서 있는 스택 프레임 안에 보관
- 메서드가 종료되면 스택 프레임도 제거 되는데 이때 스택 프레임에 포함된 지역 변수도 함께 제거
인스턴스 변수
- 인스턴스에 있는 멤버 변수를 인스턴스 변수라 부름
- 인스턴스 변수는 힙 영역에 사용, 힙 영역은 GC가 발생하기 전까지 생성
클래스 변수
- 메소드 영역의 static 영역에 보관되는 변수
- 프로그램 전체에서 사용하는 공용 공간
- 해당 클래스는 JVM에 로딩 되는 순간 생성, 그리고 JVM이 종료될 때 까지 생명주기가 이어짐, 즉 가장 긴 생명주기를 갖고 있음
</aside>