정적 변수(static variables)

2020. 3. 10. 11:08자바 Java/자바 공부 java study

반응형

static 변수는 메모리에 고정적으로 할당 되어, 프로그램이 종료될 때 해제 되는 변수이다 .

 

 

 

 class 는 컴파일 시 static 영역에 생성되고, new 연산자를 통해 생성한 객체는 heap영역에 생성된다. 

즉, static 변수와 static 메소드는 static 메로리 영역에 존재 하기 때문에 객체가 생성되기 이전 컴파일 시 이미 할당 되어있다. 

 

 

static 변수의 특징 

 

1) 메모리에 한번 할당 되므로 여러 객체가 해당 메모리를 공유하게 된다 

-하나의 클래스에 하나만 존재하는 것이고 그 클래스의 모든 객체들에 의하여 공유된다.

-보통 변수의 static 키워드는 프로그래밍시 메모리의 효율 보다는 공유하기 위한 용도로 사용하는 것이다. 

 

2) 멤버 변수와 다르게 객체의 생성 여부와  상관 없이 딱 하나만 존재하는 변수이다.

-유일무이하다. 

 

3) static 변수는 클래스 변수이다.

- 클래스에 쌓인다 .

 

4) 초기값을 설정하지 않아도 된다. 

-static 변수는 초기화가 필요하지 않는데,   static 변수처럼 클래스에 쌓이거나, 객체처럼 heap 에 쌓이는 것들은 초기화 시켜주지 않아도 자동으로 초기값이 입력된다. 

 

5) 객체를 생성하지 않고도 static 자원에 접근 하능하다.

-객체의 생성 없이 호출이 가능하고, 객체에서는 호출 불가능하다.

 

6) 일반적으로 static 변수는 public 및 final과 함께 사용 되어 public static final 로 활용 된다. 

 

7) static 이 붙은 메소드는 static 메소드 라고 하는데 static 변수는 static 메소드를 통해 접근하도록 권장 된다. 

-static 메소드는 객체의 생성없이 접근하는 함수이고, 할당되지 않은 메모리 영역에 접근 하므로 문제가 발생한다. 

-static메소드 안에서는 인스턴스 변수 접근이 불가능 하다.

-메소드 내부에서는 정적, 지역 변수만을 사용한다. this 키워드도 인스턴스 변수 이므로 사용할 수 없다. 

 

8) 일반적으로 상수들만 모아서 사용하므로 상수의 변수명은 대문자와 _를 조합하여 이름짓는다. 또한 상속을 방지하기 위해 final class 로 선언한다   

 

 

 

 

static 변수를 쓸 때 주의할 점

객체가 할당되는 heap 영역의 메모리는 garbage collector를 통해 수시로 관리받지만 static 영역에 할당된 메모리는 garbage collector 의 관리 영역 밖에 존재하므로 static을 자주 사용하면 프로그램의 종료시까지 메모리가 할당된 채로 존재하게 되어 메모리를 과도하게 사용하게 된다. 

반응형