메모리 주소 값이 '정적이다'는 뜻(<-> dynamic(메모리 주소 값이 동적이다))
프로그램 시작 시, 메모리의 위치가 정해지는 것.(어느 패키지에 있던 찾을 수 있다.)
어느 정도의 용량을 미리 확보.
Tip) 이때까지 일반적으로 사용 하던 변수는 동적으로 사용하던 것이다.
ex. String a = "";
클래스의 멤버변수로 static 변수와 일반 변수(dynamic)가 있을 경우, 메인에서 사용 시 dynamic 변수는 class를 생성해 준 후, 사용해야 하지만, static 변수는 메모리의 위치가 이미 정해져있기 때문에, class를 생성해 주지 않고도, 사용가능하다.
ex.
// class example
public class unit {
public static int staticNum;
public int dynamicNum;
}
//dynamic
public class main {
public static void main(String[] args) {
unit a = new unit(); // class를 생성해 준 후
System.out.println(a.dynamicNum); // 멤버변수 사용가능
}
}
//static
public class main {
public static void main(String[] args) {
System.out.println(unit.staticNum); // class 생성 없이, 멤버변수 바로 접근가능
}
}
Tip) 언제 어디서든 사용하기 편하지만, 메모리를 어느정도 먹기 때문에, 너무 많이 사용 시 메모리 낭비가 심하다.
Tip) class를 여러개 생성 해서 사용하여도, 한 메모리를 사용하는 것이기 때문에, 각각 사용할 수 없다.
ex.
public class main {
public static void main(String[] args) {
// unit class 3개 생성
unit a = new unit();
unit b = new unit();
unit c = new unit();
// 생성된 각각의 static변수에 각각 다른 값 할당
a.staticNum=10;
b.staticNum=20;
c.staticNum=30;
// but, 출력 결과 모두 같음 -> 모두 같은 메모리 사용 중이기 때문
System.out.println(a.staticNum);
System.out.println(b.staticNum);
System.out.println(c.staticNum);
}
}