선언된 클래스의 모든 인스턴스가 공유하는 클래스 변수
class InstCnt {
static int instNum = 0 ; // 클래스 변수 (static 변수)
InstCnt() {
instNum++ ;
System.out.println("인스턴스 생성 : " + instNum) ;
}
}
class ClassVar {
public static void main ( String[] args ) {
InstCnt cnt1 = new InstCnt(); // 모두 같은 변수 참조
InstCnt cnt2 = new InstCnt();
InstCnt cnt3 = new InstCnt();
}
}
클래스 변수의 접근 방법
클래스 내부 접근
- static 변수가 선언된 클래스 내에서는 이름만으로 직접 접근 가능
클래스 외부 접근
- private으로 선언되지 않으면 클래스 외부에서도 접근 가능
- 접근 수준 지시자가 허용하는 범위에서 접근 가능
- 클래스 또는 인스턴스의 이름을 통해 접근
class AccessWay {
static int num = 0;
AccessWay() { incrCnt(); }
void incrCnt() {
num ++; // 클래스 내부에서 이름을 통한 접근
}
}
class ClassVarAccess {
public static void main (String [] args) {
AccessWay way = new AccessWay();
way.num ++; // 외부에서 인스턴스의 이름을 통한 접근 - 인스턴스 접근 보다는 클래스 이름을 통한 접근이 더 알기 쉬움!!
AccessWay.num ++; // 외부에서 클래스의 이름을 통한 접근
System.out.println("num = " + AccessWay.num);
}
}
클래스 변수(static 변수)는 생성자 기반 초기화 하면 안된다!
이 경우 인스턴스 생성시마다 값이 리셋!
클래스 변수의 활용의 예
인스턴스 별로 가지고 있을 필요가 없는 변수
- 값의 참조가 목적인 변수
- 값의 공유가 목적인 변수
그리고 그 값이 외부에서도 참조하는 값이라면 public 으로 선언한다.
'# 02 > Java' 카테고리의 다른 글
[윤성우의 열혈자바] 10-3. System.out.println() (0) | 2019.10.21 |
---|---|
[Java] Vector (0) | 2019.10.19 |
[윤성우의 열혈자바] 9-2. 접근 수준 지시자 (0) | 2019.10.18 |
[윤성우의 열혈자바] 9-1. 정보 은닉 (0) | 2019.10.18 |
[윤성우의 열혈자바] 7-1. 클래스의 정의와 인스턴스의 생성 (0) | 2019.10.18 |