본문 바로가기

# 02/Java

[윤성우의 열혈자바] 10-1. static 선언을 붙여서 선언하는 클래스 변수

반응형


선언된 클래스의 모든 인스턴스가 공유하는 클래스 변수



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 으로 선언한다.




반응형