Static(정적)이란?
고정된이란 의미를 가지고 있습니다. Static이라는 키워드를 사용하여 Static변수와 Static메소드를 만들 수 있는데 다른말로 정적필드와 정적 메소드라고도 하며 이 둘을 합쳐 정적 멤버(또는 클래스 멤버)라고 합니다. 정적 필드와 정적 메소드는 객체에 소속된 멤버가 아니라 클래스에 고정된 멤버입니다.그렇기에 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할 때 클래스별로 관리됩니다. 따라서 클래스의 로딩이 끝나는 즉시 사용할 수 있습니다.
정적 멤버 선언
필드나 메소드를 생성 시 인스턴스로 생성할것인지 정적으로 생성할것인지에 대한 판단 기준은 공용으로 사용하느냐 아니냐로 내리면 됩니다. 그냥 생성한다면 자동으로 인스턴로 생성되며 정적으로 생성하려면 필드와 메소드 선언 시 static
이라는 키워드를 추가적으로 붙이면 됩니다.
1 | static int num = 0; |
2 | public static void static_method(){ |
3 | |
4 | } // static 리턴 타입 메소드{} |
예시
Number라는 클래스안에 클래스 변수 num과 인스턴스 변수 num2를 생성했고 두개의 Number인스턴스 number1, number2를 생성했을때 number1dptj num1과 num2를 각각 1씩 증가시키고 number2에서 num1과 num2를 각각 출력시켰을때는 num1은 1, num2는 0이 출력되었습니다.인스턴스 변수는 인스턴가 생성될때마다 생성되므로 인스턴스마다 각기 다른 값을 가지지만 정적 변수는 모든 인스턴스가 하나의 저장공간을 공유하고 항상 같은 값을 가지기에 나타난 현상입니다.
예시2
정적 메소든느 클래스가 메모리에 올라갈 때 정적 메소드가 자동으로 생성됩니다. 그렇기에 정적 메소드는 인스턴스를 생성하지 않아도 호출을 할 수 있습니다. 정적 메소드는 유틸리티 함수를 만드는데 유용하게 사용됩니다.