Static

자바에서는 Static 키워드를 사용하여 Static 변수와 Static메소드를 만들 수 있습니다.

이를 정적필드와 정적 메소드라고하며 둘이 합쳐 정적멤버라고도 부릅니다.(클래스멤버라고도 합니다)

정적멤버는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버입니다. 그렇기때문에 클래스로더가 클래스를 로딩해서, 메소드 영역에 적재할 때 클래스별로 관리되죠.

즉 정적멤버는 Heap영역이 아닌 Static영역(=클래스영역)에 할당됩니다. Static영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있는 장점을 가지지만, 반면 GarbageCollector의 관리 영역 밖에 존재하기에 Static 영역에 있는 멤버들은 프로그램의 종료까지 메모리가 할당된채로 존재하게 됩니다.

Untitled

정리

정리하자면 정적멤버는 힙영역 중 permenent 공간에 할당되며, 비정적 멤버는 객체내의 Heap영역에 존재하게 됩니다. 즉, 가비지콜렉터의 관리대상은 비정적멤버만 해당이되며, 이로인해 시간적으로 차이점을 보입니다.

정적멤버는 프로그램이 종료될때 까지 유지되며, 비정적멤버는 가비지콜렉터에 의해 할당해제될 수도 있죠. 또한, 정적멤버는 모든 객체가 공유하여 어디서든지 참조할 수 있는 특징이 있으며, 반면 비정적 멤버는 객체내의 공간을 유지하므로 공유되지 않는다는 특징이 있습니다.

final 키워드

간단한 내용이지만, final 키워드가 클래스, 메소드, 변수 앞에 붙었을 때 각각의 의미에 대해서 정확히 정리하였습니다.