static
메모리 주소 값이 “정적이다”는 뜻입니다. 프로그램 시작 시, 메모리의 위치가 정해지는 것입니다.(어느 패키지에 있던 찾을 수 있습니다.)
static변수와 일반변수 비교
클래스의 멤버변수로 static변수와 일반변수(dynamic)가 있을 경우, 메인에서 사용 시 dynamic변수는 class를 생성해준 후, 사용해야 하지만, static 변수는 메모리의 위치가 이미 정해져있기 때문에, class 를 생성해 주지 않고도, 사용 가능합니다.
1 | public class unit { |
2 | public static int staticNum; |
3 | public int dynamicNum; |
4 | } |
1 | // dynamic |
2 | |
3 | public class main { |
4 | public static void main(String[] args){ |
5 | unit a = new unit(); // class를 생성해 준 후 |
6 | System.out.println(a.dynamicNum); // 멤버변수 사용가능 |
7 | } |
8 | } |
1 | // static |
2 | public class main { |
3 | public static void main(String[] arges){ |
4 | System.out.println(unit.staticNum); // class 생성없이, 멤버변수 바로 접근 가능 |
5 | } |
6 | } |
사용하기 편하지만, 메모리를 어느정도 차지하기 때문에, 너무 많이 사용할 시 메모리 낭비가 심합니다.
class를 여러개 생성해서 사용해도, 한 메모리를 사용하는 것이시 때문에, 각 각 사용할 수 없습니다.
1 | public class main { |
2 | public static void main(String[] args) { |
3 | // unit class 3개 생성 |
4 | unit a = new unit(); |
5 | unit b = new unit(); |
6 | unit c = new unit(); |
7 | |
8 | // 생성된 각각의 static 변수에 각각 다른 값 할당 |
9 | a.staticNum = 10; |
10 | b.staticNum = 20; |
11 | c.staticNum = 30; |
12 | |
13 | // 출력 결과는 모두 같습니다.(같은 메모리를 사용중이기 때문) |
14 | System.out.println(a.staticNum); |
15 | System.out.println(b.staticNum); System.out.println(c.staticNum); |
16 | } |
17 | } |