HiDevelop

[Java]Static 본문

Java

[Java]Static

꽃달린감나무 2021. 12. 21. 15:52
728x90
package package1;

import package1.StaticParameter;


public class StaticParameter {
    
  public static int num = 0;
  
  public void functionA(){num++;}
  public void functionB(){num--;}
  public void functionC(){num *= num;}
  
  public static void main(String[] args) {
    
      StaticParameter testA = new StaticParameter();
      StaticParameter testB = new StaticParameter();
      StaticParameter testC = new StaticParameter();
      System.out.println(num);
      testA.functionA();
      testB.functionA();
      System.out.println(num);
      testC.functionC();
      System.out.println(num);
      testA.functionB();
      System.out.println(num);     
  }

}

result 

0

2

4

위 코드를 보면 static으로 선언된 변수는 한 클래스의 내에 모든 인스턴스가 공유하는 형태의 변수임을 알 수 있다.

만약 static으로 형태로 선언되지 않았다면,  변수의 생존시간이 함수가 호출되면서 종료되기까지 이기 때문에  결과값은 0,1,0,0으로 출력될 것 이다.  

 

static으로 선언된 변수의 메모리 공간은 하나만 존재하며, 어디서나 접근이 가능한 변수이다. 단, 어디서나 접근이 가능할려면 public으로 선언되어야 한다.(클래스 내부에서만 사용하기 위할 때는 default로 선언하여도 된다.)

 

그럼 static변수의 초기화 시점은 언제일까?

이를 이해하기 위해서는 Java의 실행원리를 알아야한다.  다른 프로그래밍 언어같은 경우 컴파일의 완료되면 실행파일(.exe)파일로 완성된다. 하지만 Java의 경우 컴파일을 완료되어도 하나의 실행파일로 만들어지지 않고 여러 개의 클래스 파일들만 생성된다. 이는 Java가 메모리를 효율적으로 쓰기 위해 선택한 방식이다. 다른언어의 경우 하나의 실행파일을 전부 메모리 공간에 올려야하지만, Java는 필요한 클래스파일만을 메모리공간에 올리기 때문에 이를 효율적으로 사용할 수 있다. 따라서 static변수가 초기화되는 시점은 JVM에 의해서 클래스 파일이 메모리 공간에 올라가는 시점이다.

 

728x90

'Java' 카테고리의 다른 글

[Java] 상속2  (0) 2022.01.04
[Java]상속  (0) 2022.01.01
[Java] 클래스의 정의와 인스턴스  (0) 2021.11.20
[Java] 재귀 메소드  (0) 2021.11.17
[Java] 원의 넓이와 둘레 구하기 && 소수 판별하기  (0) 2021.11.16