- 목차
- 프로그램 실행 시 Class Loader는 static 키워드를 가진 모든 것들을 Method Area(= static Area)에 메모리를 할당
- static Area 에 할당된 메모리는 모든 객체가 공유하므로, 하나의 멤버를 어디 서든지 참조 가능
- Garbage Collector의 관리 영역 밖에 존재하기 때문에 static Area에 있는 멤버들은 프로그램의 종료 시까지 메모리가 할당된 채로 존재
- java.util.Date, java.lang.Math, singleton pattern등에서 사용
멤버 변수(Member variable)
- class field에 선언되는 변수
- 멤버 변수 - [public/private/protected] [static/final] 변수 타입 변수명;
- 객체(Instance) 변수 - 객체가 가질 수 있는 특성 표현
- 객체 속성 변수(기본형)
- 객체 참조 변수(참조형)
- 클래스(static) 변수 - 전역 변수(global variable)의 개념을 가짐
- 종단(final) 변수 - 변할 수 없는 상수값을 가짐
static 사용
- 멤버 변수 중에서 모든 인스턴스에 공통적으로 사용해야 하는 것이 있다면 static 키워드 사용
- 인스턴스를 생성하면, 각 인스턴스는 서로 독립적이므로 서로 다른 값을 유지한다.
- 하지만 경우에 따라서 각 인스턴스들이 공용으로 사용해야 하는 것이 있다면 그때 static 키워드를 붙여주는 것이다.
- ex) private static int num = 0;
- 메서드 중에서 공통적으로 사용해야 하는 메서드가 있다면 static 키워드 사용
- static method (정적 메서드)에서는 인스턴스 변수의 사용을 금지
- 반대로 인스턴스 멤버에서는 클래스 멤버들을 언제나 사용 가능(이미 메모리에 존재)
- static을 붙이면 메서드 호출 시간이 짧아지므로 효율이 높아진다.
- ex) Math class의 모든 method는 static method (정적 메서드)이다.
- ex) public static void method() {...}
정리
- static 키워드를 통해서 생성된 클래스 맴버들은 static area에 할당된다.
- static Area 에 할당된 메모리는 모든 객체가 공유하므로, 어디 서든지 참조 가능
- 멤버 변수나 메서드 중에서 공통적으로 사용해야 할 것이 있다면 static 키워드를 통해서 선언
- static 키워드는 메모리를 딱 한 번만 할당하므로 메모리 효율의 목적으로 사용
- static 키워드는 같은 곳의 메모리 주소 만을 바라보기 때문에 값을 공유의 목적으로 사용