다양한 프로그래밍 언어를 사용하다 보면 여러가지 키워드가 있다.

그 중에 static 키워드에 대해서 알아본다.

 


static ?

사전적인 의미로 'static: [형용사] (변화움직임이 없이) 고정된[고정적인]' 를 가지고 있다.

이것만 봐도 우리가 프로그래밍을 할 때 사용하는 static 키워드가 어떤 역할을 할 지 예상해볼 수 있다. 

 

Java 언어를 기준으로 static 키워드에 대해서 설명하면,최초 클래스를 로드할때 메모리에 할당해 종료될 때까지 유지되는 것을 말한다.

 

그럼 여기서 '메모리에 할당한다' 것에 대해서 궁금증이 생길 수 있다.

이미지 출처: Javatpoint

위는 JVM의 메모리 구조이다.

가장 왼쪽에 Method Area와 Heap Area가 보일텐데, 

JVM은 클래스가 사용되면 클래스의 정보를 읽어 Method Area에 저장한다.

이때!! static 변수가 이 Method Area에 저장되고, Garbage Collector(이하 GC)의 관리를 받지 않고 

프로그램의 종료시까지 계속 유지된다.

하지만 우리가 일반적으로 new해서 생성하는 객체들은 Heap Area에 저장돼 Garbage Collector의 관리를 받는다.

 

static 키워드의 특징

그럼 이렇게 사용되는 static 키워드는 어떤 특징을 가질까?

바로 객체를 생성하지 않고도 접근할 수 있는 것이다.

이미 method area에 존재하므로 객체가 생성되기 전에 할당되어 있기 때문이다.

 

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MyClass {
    public static myStaticValue = "hello world";
 
    public static int myStaticMethod(int a, int b) {
        return a + b;
    }
 
    public int myNormalMethod(int a, int b) {
        return a - b;
    }
}
 
 
String a = MyClass.myStaticValue;
int resultA = MyClass.myStaticMethod(12);
 
MyClass m1 = new MyClass();
int resultB = m1.myNormalMethod(12);
cs

 

사용예시

그럼 static 키워드는 언제 붙여야하는 걸까?

보통 final 키워드와 함께 변하지 않는 값으로 고정하여 여러 객체에서 한가지 값을 사용할 때 사용한다.

 

예를 들어서 공통 에러코드를 처리할 때

public static final로 선언하여 여러 객체가 하나의 메모리를 참조할 수 있도록 한다.

 

또한 최댓값을 반환한다거나 하는 특정 유틸 메소드를 static 으로 선언해서 사용한다.

이때 static 메소드에서 사용하는 변수는 모두 static 으로 선언되어야 한다.

(static 메소드에서 객체가 생성되어야 접근할 수 있는 일반 변수에 접근할 수 없음)

 

주의사항

이렇게 static 키워드는 메모리에 올라가있어 따로 객체를 생성하지 않고 사용할 수 있다는 특징이 있다.

하지만 이런 특징때문에 데이터를 관리할 때 유의해야 한다.

 

만약 static 키워드로 변수를 선언해놓고, 여러 객체에서 해당 변수의 값을 바꾼다면

해당 변수를 사용하는 모든 객체에 영향을 미칠 뿐더러 추적이 어려워진다.

 

 

끝!

+ Recent posts