개발새발
자바static 본문
- static 키워드는 주로 멤버 변수와 메서드에 사용된다.
package static1;
public class Data3 {
public String name;
public static int count; //static
public Data3(String name) {
this.name = name;
count++;
}
}
package static1;
public class DataCountMain3 {
public static void main(String[] args) {
Data3 data1 = new Data3("A");
System.out.println("A count=" + Data3.count);
Data3 data2 = new Data3("B");
System.out.println("B count=" + Data3.count);
Data3 data3 = new Data3("C");
System.out.println("C count=" + Data3.count);
}
}
//결과
A count=1
B count=2
C count=3
- static 이 붙은 멤버 변수는 메서드 영역에서 관리한다.
- static 이 붙은 멤버 변수 count 는 인스턴스 영역에 생성되지 않는다. 대신에 메서드 영역에서 이 변수를 관리한다.
- Data3("A") 인스턴스를 생성하면 생성자가 호출된다
- 생성자에는 count++ 코드가 있다. count 는 static 이 붙은 정적 변수다. 정적 변수는 인스턴스 영역이 아니라 메서드 영역에서 관리한다. 따라서 이 경우 메서드 영역에 있는 count 의 값이 하나 증가된다.
멤버 변수(필드)의 종류
- 인스턴스 변수: static 이 붙지 않은 멤버 변수, 예) name
- static 이 붙지 않은 멤버 변수는 인스턴스를 생성해야 사용할 수 있고, 인스턴스에 소속되어 있다. 따라 서 인스턴스 변수라 한다.
- 인스턴스 변수는 인스턴스를 만들 때 마다 새로 만들어진다.
- 클래스 변수: static 이 붙은 멤버 변수, 예) count
- 클래스 변수, 정적 변수, static 변수등으로 부른다. 용어를 모두 사용하니 주의하자
- static 이 붙은 멤버 변수는 인스턴스와 무관하게 클래스에 바로 접근해서 사용할 수 있고, 클래스 자체에 소속되어 있다. 따라서 클래스 변수라 한다.
- 클래스 변수는 자바 프로그램을 시작할 때 딱 1개가 만들어진다. 인스턴스와는 다르게 보통 여러곳에서 공 유하는 목적으로 사용된다.
- 지역 변수(매개변수 포함) : 지역 변수는 스택 영역에 있는 스택 프레임 안에 보관된다.
- 메서드가 종료되면 스택 프레임도 제거 되는데 이때 해당 스택 프레임에 포함된 지역 변수도 함께 제거된다.
- 지역 변수는 생존 주기가짧다.
- 인스턴스 변수 : 인스턴스에 있는 멤버 변수를 인스턴스 변수라 한다. 인스턴스 변수는 힙 영역을 사용한다.
- 힙 영역은 GC(가비지 컬렉션)가 발생하기 전까지는 생존하기 때문에 보통 지역 변수보다 생존 주기가 길다.
- 클래스 변수 : 클래스 변수는 메서드 영역의 static 영역에 보관되는 변수이다. 메서드 영역은 프로그램 전체에서사용하는 공용 공간이다.
- 클래스 변수는 해당 클래스가 JVM에 로딩 되는 순간 생성된다. 그리고 JVM이 종료될때 까지 생명주기가 어어진다. 따라서 가장 긴 생명주기를 가진다.
'자바기초 다시보기' 카테고리의 다른 글
스택 (0) | 2023.12.21 |
---|---|
자바 메모리 구조 (0) | 2023.12.21 |
접근 제어 (0) | 2023.12.21 |
생성자 (Construct) (0) | 2023.12.20 |
객체 지향 프로그래밍 vs 절차 지향 프로그래밍 (1) | 2023.12.20 |
Comments