티스토리 뷰

자바 프로그래밍에서 성능을 향상하는 방법은 여러 가지가 있다. 그중에서 한 가지는 static을 사용하는 것이다. 하지만 잘 모르고 statis을 사용하다가는 시스템이 더 느려지거나, 오류를 내뿜는 시스템이 될 수도 있다.

 

 

static의 특징


자바에서 static으로 지정했다면, 해당 메서드나 변수는 정적이다.

public class VariableTypes {
    int instance Variable;
    static int classVariable;
    public void method(int parameter) {
        int localVariable;
    }
}

여기서 static으로 선언한 classVariable은 클래스 변수라고 한다. 왜냐하면 그 변수는 '객체의 변수'가 되는 것이 아니라 '클래스의 변수'가 되기 때문이다. 100개의 VariableTypes 클래스의 인스턴스를 생성하더라도, 모든 객체가 classVariable에 대해서는 동일한 주소의 값을 참조한다.

 

static 초기화 블록을 알아보자.

public class StaticTest {

    static String staticVal;
    static {
        staticVal = "Static Value";
        staticVal = StaticTest2.staticInt + "";
    }

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

    static {
        staticVal = "Performance is important !!!";
    }
}

static 초기화 블록은 위와 같이 클래스 어느 곳에나 지정할 수 있다. 이 static 블록은 클래스가 최초 로딩될 때 수행되므로 생성자 실행과 상관없이 수행된다. 또한 여러 번 사용할 수 있으며, 이와 같이 사용했을 때 staticVal 값은 마지막에 지정한 값이 된다. static 블록은 순차적으로 읽힌다는 의미이다.

 

static의 특징은 다른 JVM에서는 static이라고 선언해도 다른 주소나 다른 값을 참조하지만, 하나의 JVM이나 WAS 인스턴스에서는 같은 주소에 존재하는 값을 참조한다는 것이다. 그리고 GC의 대상도 되지 않는다. 그러므로 static을 잘 사용하면 성능을 뛰어나게 향상할 수 있지만, 잘못 사용하면 예기치 못한 결과를 초래하게 된다.

 

특히 웹 환경에서 static을 잘못 사용하다가는 여러 스레드에서 하나의 변수에 접근할 수도 있기 때문에 데이터가 꼬이는 큰일이 발생할 수도 있다.

 

static 잘 활용하기


자주 사용하고 절대 변하지 않는 변수는 final static으로 선언하다.

설정 파일 정보도 static으로 관리하자.

코드성 데이터는 DB에서 한 번만 읽자.

 

static은 원리를 알고 잘 사용하면 시스템의 성능을 향상할 수 있는 마법의 예약어다. 하지만 잘못 사용하면 돌이킬 수 없는 일, 시스템이 다운되거나 예기치 못한 결과가 나올 수도 있다. static은 반드시 메모리에 올라가며 GC의 대상이 되지 않는다. 객체를 다시 생성한다고 해도 그 값은 초기화되지 않고 해당 클래스를 사용하는 모든 객체에서 공유하게 된다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함