Static
클래스 변수(static변수, 공유변수)
- 'static 자료형 변수명' 구조이다.
- 선언위치 : 클래스 영역
- 생성시기 : 인스턴스가 생성되었을 때
인스턴스마다 독립적인 저장공간을 갖는 인스턴스변수와는 달리, 클래스변수는 모든 인스턴스가 공통된 저장공간을 공유하게 된다. 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성의 경우, 클래스변수로 선언해야 한다.
인스턴스변수는 인스턴스가 생성될 때 마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있지만, 클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하므로 항상 공통된 값을 갖는다.
클래스 메서드(static메서드)
- 변수와 같이 메서드 앞에 'static'이 붙어 있으면 클래스메서드이다.
- 클래스 메서드도 클래스변수처럼 객체를 생성하지 않고도 '클래스이름.메서드이름(매개변수)'와 같은 시으로 호출이 가능하다.
- 인스턴스 메서드는 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드인 반면, 인스턴스와 관계없는(인스턴스 변수나 인스턴스 메서드를 사용하지 않는)메서드를 클래스 메서드(static메서드)로 정의한다.정리
- 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
- 클래스변수(static변수)는 인스턴스를 생성하지 않아도 사용할 수 있다.
- 클래스 메서드(static 메서드)는 인스턴스 변수를 사용할 수 없다.
- 인스턴스 변수는 인스턴스가 반드시 존재해야만 사용할 수 있는데, 클래스메서드(static메서드)는 인스턴스 생성 없이 호출가능하므로 클래스 메서드가 호출되었을 때 인스턴스가 존재하지 않을 수도 있다. 반면에 인스턴스변수나 인스턴스 메서드에서는 static이 붙은 멤버들을 언제든지 사용할 수 있다.
- 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.
- 메서드 호출시간이 짧아지므로 성능이 향상된다. (인스턴스 메서드는 실행 시 호출되야할 메서드를 찾는 과정이 추가적으로 필요하기 때문이다)