2010년 7월 28일 수요일

static 의 의미

C# 뿐만 아니라 자바에서도 static 이라는 키워드가 있다.
static 의 사전적 의미는 '정적인' 이라는 의미이다.
'정적인' 이라는 의미가 도대체 뭐야!
'가만이 있는'...뭐 이런 뜻인데 말이야.
반대말로는 '동적인'이라는 의미의 dynamic 인 것 같은데...

static 이라는 말을 가장 처음, 많이 사용했을 때가...
디아블로2를 할 때 소서리스의 스킬중 스태틱 필드 static field가 있었다.
몬스터의 피를 25% 깍는 기술이다. 초반에는 소서리스 뿐만 아니라 다른 캐릭의 공격 데미지가 매우 낮다. 그래서 도망다니고, 포션을 빨아가며 엄청 때려야 몹이 죽는데, 소서리스의 스태틱 필드를 사용하면 초반에도 몹의 피가 쭉쭉 다는게 눈에 보인다. 또 범위 공격이라 스킬을 1만 올린 다음에 몬스터들을 한곳에 몰아놓고 적당히 스태틱 필드를 사용하면 한방에 여러 몬스터에게 엄청난 데미지를 줄수 있다. 단점으로는 스태틱 필드로 몹을 죽일 수는 없다. 왜냐하면 몹의 피의 25%를 데미지로 준다. 즉 피가 1이 남았어도 스태틱 필드로는 절대 몹을 죽일 수 없다.
...잡설이 길었다. 아무튼 static이라는 의미는
고정적인 퍼센트로 데미지를 준다!
(사전찾아보니 static electricity가 정전기라는 뜻이군, 단순히 '고정적인 퍼센트의 데미지'의 의미가 아닐 수도 있다. 문맥상 중요한것이 아니므로 패쓰!)

클래스 안에서 변수를 선언할 때 나온다.
'변수를 static으로, 즉, 정적으로 선언하겠다' 라는 의미인데.. 말은 되지만 무슨 뜻인지 모르겠다.
......
'동적인' 과 '정적인'에 대한 설명!
프로그래밍 언어에서 '정적' 혹은 '동적'이라는 말은 메모리에 대해 붙이는 경우가 많다. 동적으로 메모리를 어떻게 하겠다, 혹은 정적으로 메모리를 다루겠다. 뭐 이런 뜻이다.
즉, 'static' 이라는 말은 정적으로 메모리를 할당하겠다. 라는 뜻인데,
메모리를 동적으로 할당하겠다는 것은 메모리를 필요로 하는 경우가 생길 때 메모리를 그때그때 새로 할당해서 그 대상이 없어지면 할당된 메모리도 사라지고, 새로 생기면 메모리를 새로 할당하겠다는 뜻이다.
정적으로 메모리를 할당하겠다는 의미는 할당된 특정 메모리 공간을 계속 사용하는 것이다. 움직이지 않고, 즉 정적으로, 새로 뭘 만들고 지우고 하지 않고, 있는 그대로를 그냥 사용하고, 또 사용해야 되면 사용하던걸 그냥 그대로 사용하고. 이런 식이다.
...
객체를 선언할 때 static이라는 키워드를 주게 되면, 나중에 그 객체를 사용하기 위해 인스턴스를 생성할 때 new 키워드를 써서 새로 메모리를 할당하지 않고 바로 써도 된다는 의미이다.
만약 static 키워드가 없다면 객체의 인스턴스를 만들어야 한다. 인스턴스란 고정된 틀(객체)에서 찍어낸 내용물(같은 모양의 다른 것들)이다.

댓글 없음:

댓글 쓰기