Java

[ Java ] static 에 관하여

구티맨 2020. 9. 28. 10:40

static 은 객체가 아닌 클래스에 할당이 됩니다.

 

그래서 A 클래스에 여러 객체가 생성되어도 static 은 같은 메모리를 참조하고 있습니다.

 

static 은 클래스가 최초 로딩될 때 수행 되며, static 초기화 블록은 순차적으로 읽혀집니다.

 

이를 바탕으로 아래 예제를 살펴봅시다.

 

public class Main {

    static private String val = "Hello";

    static {
        val = "static block";
    }

    public static void main(String[] args) {
        System.out.println(val);
    }

    static {
        val = "static block2";
    }
}

결과
static block2

 

Static 사용

static 을 어떻게 잘.. 쓰면 좋을까요?

 

static은 GC의 대상이 되지 않는 다는 점이 중요한데, 이를 잘 활용하면 성능을 향상시킬 수 있지만

 

그렇지 않으면 성능에 오히려 악영향을 끼칠 수 있습니다.

 

설정 파일 읽기

객체 마다 변하지 않는 설정 파일 내용이나 특정 템플릿 내용을 읽을 때 static으로 데이터를 읽으면

 

객체 생성시 마다 파일에 엑세스를 하지 않아도 되어 부하를 줄일 수 있습니다.

 

메모리 릭

위에 언급 했듯이, GC 의 대상이 되지 않기 때문에 static 변수에 메모리가 계속 할당( new )되기만 하면

 

메모리가 정리기 되지 않아 메모리 릭으로 이어져 시스템 자체가 돌아갈 수 없는 상태에 이를 수 있습니다.