static

개발하다 갑자기 이상한 궁금증이 생겨서 이렇게 글을 정리한다.

static 이라는 키워드는 다들 잘 알꺼라고 본다.

내 짧은 지식으론 static은 static메모리영역에 올려서 어플리케이션 내에서 모든 클래스가 하나의 메모리 영역을 접근하는걸 뜻한다.
그러므로 어떤면에서는 메모리 효율성을 높일수 있다. 물론 남발하면 당연히 안된다;;; 어플리케이션이 종료될때까지 메모리에서 사라지지 않으니까
(맞나;;;)

그런데 소스를 보던중 갑자기 눈에 띈  private static final

내 짧은 지식의 넓이를 넘어가는 private static.....

아니 도대체!.. 다른 클래스랑 공유를 하지도 않을꺼면서 왜 혼자 호사스럽게 static을 쓰는지 이해가 되질 않아서 한참을 생각해 보았다;

근데 생각해보니 간단하다.

private static 이라면 어플리케이션에서 그 클래스들끼리 해당 private static 객체를 공유를 할수 있다는 것이다
(이걸 떠올리는데 10분이나 생각했다 ㅡ_ㅡ)
이건 그냥 맴버변수랑은 틀리다. 맴버변수는 그 클래스가 개별로 각각 생성될 때마다 해당 객체가 메모리에 생성된다.

하지만 static 이라는 키워드의 특성상 분명 한곳의 메모리 영역에 자리를 잡을것이다.
그러므로 그 변수는 그 변수를 선언한 클래스만 자주 쓰는 변수라는 것이다.

해당 클래스의 객체가 하나면 생성된다면 별 필요 없겠지만 만약에 스레드에서 생성되는 객체라면 이야기가 틀려진다.
private static 을 포함하고 있는 클래스가 스레드에서 여러개의 객체로 생성되어도 static 객체는 한곳의 메모리에 생성되기 때문이다.
private 으로 접근제한을 하는이유는.. 그냥 다른 클래스들의 접근을 원하지 않으니까  (아..짧다..ㅡ_ㅡ;;;)

그러므로 생각해보면  private static 변수를 쓰는 경우는 아주 약간 특이한 경우에만 사용되어야 한다.

변수가 아니라 final(상수)와 같이 쓰고 그 클래스가 자주 객체화 된다면 사용하자.(한마디로 상수 사용시)

그렇다!! 상수를 사용시에 static 을 사용한다면 꽤 괜찮을것같다.
그 이유는 상수라면 그 값이 변하지 않는 객체를 말한다.
그러므로 변하지 않는 객체를 쓰는데  생성되는 다수의 클래스 객체마다 해당 상수 객체를 생성하는것도 비효율적이라는 말이다.
하지만 또 여기서 "자주 객체화 된다면"이라는 조건을 단 이유는, static 이라는 키워드는 static 이라는 메모리 영역에 해당 어플리케이션이 죽을때까지 살아 있기 때문에 자주 메모리에 올라가는 클래스가 아니라면 static 키워드를 사용해서 상수객체를 선언할 필요가 없다는 뜻이다.

즉.. 잘 봐서 사용하자;;;;;





'언어 > 기타' 카테고리의 다른 글

[JSF] custom EL Function 정의하기.  (0) 2010.04.29
properties  (0) 2009.12.09