개요
static 변수들이 어떻게 생성되고 어디에 저장되는지 알아보겠습니다. 또한 static의 장단점을 알아보겠습니다.
목차
static의 생성 과정과 저장 위치
static 장점
static 단점
non-static 특징
static의 생성 과정과 저장 위치
static은 JVM Runtime Data Area의 Method Area에 위치하며 Class Variable로 분류됩니다. class파일이 JVM에 의해 ClassLoader에 들어오면 Loading 이후에 Linking 과정 중 Prepare에서 static 변수에 메모리를 할당하고 초기값을 가집니다. Linking 이후 Initialization에서, 모든 static 변수들은 자신이 가지고 있는 해당 값이 할당됩니다. 이 공간이 Method Area이다.
static의 장점
static의 장점은 Method Area는 모든 Thread가 공유하는 공간이기 때문에, 공용자원으로 사용이 가능합니다.
이미 Method Area의 공간의 메모리에 할당되었기 때문에 직접 접근이 가능하다. 따라서, 객체로 만들어서 사용할 필요가 없습니다. 변수나 메소드 모두 [클래스명.이름] 으로 접근하여 사용할 수 있습니다. 절대적으로 변하지 않을 경우 final static을 함께 사용 할 수 있습니다.(ex 3.14 파이값)
static의 단점
static의 단점은 프로그램이 시작할 때부터 끝날때까지 계속 그 자리에서 메모리를 점유합니다. 편리하지만 자주 남발해서는 안됩니다. 따라서 몇 번 사용하지 않는다면 메모리 낭비가 될 수 있습니다. static으로 선언 된 클래스에는 static 변수만 가능합니다.
non-static의 특징
non-static의 특징은 Method Area에 할당되지 않으며, 메모리에 있지 않기 때문에 객체를 만들어서 접근해야 합니다. 객체를 만드는 순간 해당 인스턴스가 Heap 영역 메모리에 생성됩니다.
따라서 객체가 생성될 때부터 사용이 가능하며, 객체 사용이 끝나면 GC에 의해서 소멸되므로 메모리 관리가 편합니다
결론
- 만약 지속적으로 공통부분에 같은 변수나 메소드가 필요하면 static 선언이 효율적입니다.
- static 메서드를 만든경우, 지역변수를 가지거나 같은 static 변수(클래스 변수)를 사용할 수 있지만,
인스턴스 변수를 사용할 수 없습니다. 왜냐하면 static 은 메모리에 할당이 되어 있으나 인스턴스 변수는 메모리에 할당되어 있는지 확인할 수 없기 때문입니다.
- 반대로 인스턴스 메서드는 static 변수(클래스 변수)를 사용할 수 있습니다. 왜냐하면 객체는 heap에 할당되는데, 그전부터 이미 static은 메모리에 존재하므로 사용이 가능하기 때문입니다.
- 보통 객체지향 프로그래밍을 한다면, static 변수는 안티 패턴이므로 주의합니다.
참고
https://itpangpang.tistory.com/72
'학습' 카테고리의 다른 글
MVC vs MVP vs MVVM (0) | 2020.11.02 |
---|---|
Framework vs Library vs API (0) | 2020.11.01 |
URI vs URL vs URN (0) | 2020.09.06 |
TreeMap vs HashMap vs LinkedHashMap (0) | 2020.08.25 |
Interface vs Abstract Class (0) | 2020.08.23 |