[Java] static 키워드
정리
static 이란
- 공유되는 값에 사용
- 바뀌지 않는 값에 final과 함께 사용
- static 메서드에서 non static 필드나 메서드에 접근 할 수 없다.
- non static 보다 먼저 생성 되기 때문
static 사용 위치
- static 멤버 변수
- 클래스 변수라고도 부름
- 모든 해당 클래스는 같은 메모리를 공유
- 특정한 인스턴스에 종속되지 않음
- 인스턴스를 만들지 않고 사용 가능
- static이 붙은 멤버변수(클래스변수)는 클래스가 메모리에 올라갈때 이미 자동적으로 생성되기 때문
- System.out.println(Test.count);
- static 메소드
- 클래스 메소드라고도 부름
- 오버라이드 불가
- 상속 클래스에서 보이지 않음
- static 블록
- 클래스 내부에 만들 수 있는 초기화 블록
- 클래스가 초기화될 때 실행되고, main() 보다 먼저 수행
- static import
- 다른 클래스에 존재하는 static 멤버들을 불러올 때 사용
- 멤버 메소드를 곧바로 사용 가능
- static inner class
- 해당 클래스의 객체를 따로 생성하지 않고 사용 가능
- static 변수와 메서드만 참조 가능
- 바깥의 class는 static 클래스라서 static을 붙이면 에러가 난다!
- 즉 static을 붙일 필요가 없어서 안붙이는 것이지 static 클래스가 아니거나 불가능해서 static을 안붙이는 것이 아니다.
메모리상 위치
- 클래스 변수는 JVM Runtime Data Area에서 Method area 에 들어감
- 클래스는 Method area에, 객체는 heap에 올라감
static 장/단점
- static 장점
- 메모리를 효율적으로 사용 가능
- 생성할 때마다 인스턴스가 힙에 올라가는 것이 아니라 고정 메모리이므로 효율적
- 속도가 빠름
- static 단점
- 무분별한 static의 사용은 메모리 Leak의 원인이 됨
- 프로그램 종료 시점에 메모리 반환하므로 garbage collection 대상이 아니므로..
- 많이 참조되는 static 변수는 오류 발생 시 디버깅이 힘들다.
- 재사용성이 떨어짐
- interface를 구현하는 데 사용될 수 없음.
참조