10-1 static 선언을 붙여서 선언하는 클래스 변수

클래스변수 = static 변수

public 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();
    }
}
인스턴스 생성: 1
인스턴스 생성: 2
인스턴스 생성: 3

클래스변수는 이 클래스와 관련이 없다고 생각하기

static 을 붙이면 직접 접근 가능한 변수가 된 것

클래스 내부 접근

static 변수가 선언된 클래스 내에서는 이름만으로 직접 접근 가능

클래스 외부 접근

private로 선언되지 않으면 클래스 외부에서도 접근 가능

접근 수준 지시자가 허용하는 범위에서 접근 가능

클래스 또는 인스턴스의 이름을 통해 접근

public 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);
    }
}

AccessWay way = new AccessWay

⇒ AccessWay 인스턴스 생성 way를 참조변수로 AccessWay 인스턴스 참조

way.num++

⇒ 그 클래스의 인스턴스를 참조하는 참조변수 way를 통해서 접근