728x90
※참조 :
Static
- static이 붙은 변수, 메소드는 클래스가 메모리에 올라갈 때 선언이 되어서 인스턴스(클래스 객체)를 생성하지 않고 사용이 가능함
- 정적인 -> 메모리에 고정되기 때문
- static을 사용한다의 궁극적 의미는 모든 객체가 '공유' 하고 있다는 의미
메모리 구조
1. 메소드 영역
- 클래스가 올라가는 메모리 영역
- GC의 영향을 받지 않고 항상 상주하는 영역
- static으로 선언된 것들이 올라가는 영역
- 클래스에서 생성된 모든 객체들은 자신이 속한 클래스에서 접근할 수 있기 때문에 static이 붙은 데이터에 모든 객체가 동일하게 접근 가능
2. Heap 영역
- 클래스에서 생성된 객체(인스턴스)들이 올라가는 영역
- GC가 관찰하면서 참조되지 않는 메모리들을 회수함
멤버변수에 static을 써야할 때
- 모든 인스턴스가 공통적으로 가져야하는 속성일 때 static을 붙임
메소드에 static을 써야할 때
- 객체의 데이터(객체의 현재 상황)에 영향을 받지 않고 완벽하게 동일하게 동작하는 메소드를 만들고 싶을 때
- ex) Integer.parseInt()
메소드 내에서 인스턴스 변수를 사용하지 않으면 가급적 static 붙이는게 좋음
- 호출 시간 짧아짐
- but 메모리가 회수되지 않음
예시
- 붕어빵 클래스를 만들어보자
- 붕어빵 클래스에서 모든 붕어빵들을 밀가루 반죽을 공통으로 사용하고 모양도 모두 붕어빵 모양으로 공통이다.
- 하지만 붕어빵의 속은 팥을 사용할 수도 있고 슈크림을 쓸수도 있기에 인스턴스마다 다 달라야하는 속성임.
static 블럭 { }
- 클래스가 메모리 상에 올라갈 때 단 한 번만 호출되는 영역
statc{
System.out.println("한 번만 실행됨");
}
728x90
'Java' 카테고리의 다른 글
[자바] final 키워드 (0) | 2020.10.23 |
---|---|
[자바] 추상 클래스 (Abstract Class) (0) | 2020.10.23 |
[자바] 접근 제어자 (0) | 2020.10.23 |
[자바] 직렬화 (Serialize) (0) | 2020.10.20 |
[자바] hashCode() (0) | 2020.09.17 |
댓글