0%

JavaStatic

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
}

image