static
변수 사용특정 클래스에서 공용으로 함께 사용할 수 있는 변수를 만들 수 있다면 편리할 것이다.
static
키워드를 사용하면 공용으로 함께 사용하는 변수를 만들 수 있다.
package static1;
public class Data3 {
public String name;
public static int count; // static
public Data3(String name) {
this.name = name;
count++;
}
}
static int count
부분을 보면 변수 타입(int
) 앞에 static
키워드가 붙어있다.static
을 붙이게 되면 static
변수, 정적 변수 또는 클래스 변수라 한다.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);
}
}
코드를 보면 count
정적 변수에 접근하는 방법이 조금 특이한데 Data3.count
와 같이 클래스명에 .
(dot)을 사용한다. 마치 클래스에 직접 접근하는 것처럼 느껴진다.
static
이 붙은 멤버 변수는 메서드 영역에서 관리한다.static
이 붙은 멤버 변수 count
는 인스턴스 영역에 생성되지 않는다. 대신 메서드 영역에서 이 변수를 관리한다.Data3(”A”)
인스턴스를 생성하면 생성자가 호출된다.count++
코드가 있다. count
는 static
이 붙은 정적 변수다. 정적 변수는 인스턴스 영역이 아니라 메서드 영역에서 관리한다. 따라서 이 경우 메서드 영역에 있는 count
의 값이 하나 증가된다.Data3(”B”)
인스턴스를 생성하면 생성자가 호출된다.count++
코드가 있다. count
는 static
이 붙은 정적 변수다. 메서드 영역에 있는 count
변수의 값이 하나 증가된다.Data3(”C”)
인스턴스를 생성하면 생성자가 호출된다.count++
코드가 있다. count
는 static
이 붙은 정적 변수다. 메서드 영역에 있는 count
변수의 값이 하나 증가된다.최종적으로 메서드 영역에 있는 count
변수의 값은 3이 된다.
static
이 붙은 정적 변수에 접근하려면 Data3.count
와 같이 클래스명 + .
(dot) + 변수명으로 접근하면 된다. 참고로 Data3
의 생성자와 같이 자신의 클래스에 있는 정적 변수라면 클래스명을 생략할 수 있다.
static
변수를 사용한 덕분에 공용 변수를 사용해서 편리하게 문제를 해결할 수 있다.
static
변수는 쉽게 이야기해서 클래스인 붕어빵 틀이 특별히 관리하는 변수이다. 붕어빵 틀은 1개이므로 클래스 변수도 하나만 존재한다. 반면에 인스턴스 변수는 붕어빵인 인스턴스의 수 만큼 존재한다.