Java에서 전역변수를 선언할 때 일반적으로 static을 붙여야 사용이 가능하기 때문에 전역변수에 많이 사용한다.
하지만, 단순히 전역변수를 선언할 때 사용하는 것이 아닌 static의 정확한 의미와 사용방법을 알아보자.
1. Static
static은 정적인, 고정된 이라는 뜻을 가지고 있으며, 변수와 메소드에 static을 사용하여 정적변수와 정적 메소드로 만들 수 있다.이를 정적 멤버(정적변수와 정적메소드)라고 한다.
2. 정적 멤버
객체들은 Heap 영역에 할당되지만, static으로 선언한 정적 멤버들은 static 영역을 할당받는다.
1) Static
- 주로 클래스들이 할당받는 영역
- GC(Garbage Collector) 가 관여하지 않는 영역
- 모든 객체가 메모리를 공유
2) Heap
- 일반적인 객체가 할당받는 영역
- GC(Garbage Collector) 가 관여하는 영역
- 메모리를 공유하지 않음
static 영역을 할당받으면?
- 각 객체마다 고유의 값을 가지는 것이 아니라, 모든 객체가 해당 변수의 값을 공유
- GC(Garbage Collector) 영역 밖에 있기 때문에 프로그램이 종료할 때까지 메모리를 할당
→ 무분별한 static의 사용은 시스템 성능에 악영향을 줄 수 있으니 유의한다.
소스코드로 확인해보자.
1) static을 사용하지 않은 경우
public class test
{
public static class Obj{
int name;
int value;
public Obj(int a, int b){
name=a;
value=b;
}
}
public static void main(String[] args)
{
Obj obj1 = new Obj(1, 10);
System.out.println(obj1.name+"번 객체 : " + obj1.value);
Obj obj2 = new Obj(2, 20);
System.out.println(obj2.name+"번 객체 : " + obj2.value);
System.out.println(obj1.name+"번 객체 : " + obj1.value);
}
}
1번 객체 : 10 2번 객체 : 20 1번 객체 : 10 |
1번 객체와 2번 객체의 값이 각각 적용되어있는 것을 알 수 있다.
2) static을 사용한 경우
public class test
{
public static class Obj{
int name;
static int value;
public Obj(int a, int b){
name=a;
value=b;
}
}
public static void main(String[] args)
{
Obj obj1 = new Obj(1, 10);
System.out.println(obj1.name+"번 객체 : " + obj1.value);
Obj obj2 = new Obj(2, 20);
System.out.println(obj2.name+"번 객체 : " + obj2.value);
System.out.println(obj1.name+"번 객체 : " + obj1.value);
}
}
1번 객체 : 10 2번 객체 : 20 1번 객체 : 20 |
1번 객체와 2번 객체의 값이 같다.
→ static으로 메모리를 공유하기 때문에, 2번 객체를 생성할 때의 값으로 갱신된 것.
도움받은 블로그 : https://coding-factory.tistory.com/524
'BE > Java' 카테고리의 다른 글
[Java] 추상클래스 vs 인터페이스 (0) | 2022.04.03 |
---|---|
[Java] Stack? Heap? (0) | 2022.03.29 |
[Java] 래퍼 클래스(Wrapper Class)란? (0) | 2022.03.22 |
[Jasper] Jasper Studio DB 연결 방법 (0) | 2022.02.19 |
[Jasper] 체크박스 사용 방법 (0) | 2022.02.14 |