이전 시간에 JVM에 관해 포스팅을 한적이 있다 먼저 그글을 읽어야 이해가 쉬울 것이다 (http://galid1.tistory.com/143)
Static 이란
- static 키워드는 클래스 차원의 변수와 메서드를 만들때에 사용되는 키워드이다
=> 이와 반대로 static 키워드가 붙지 않는 변수,메서드는 인스턴스 변수 ,메서드 라고 불린다.
- instance를 생성할때마다 생성되지 않고 클래스 로딩시 단 한번만 Class Areas에 생성된다.
(메모리상의 이점 : 인스턴스마다 변수를 갖지 않으므로)
- static 키워드가 붙은 변수 , 메소드는 Class Areas에 먼저 상주하게 되므로 객체 생성이 필요 없다
- Class Areas에 상주하므로 Class의 모든 instance가 공유하게 된다.
사용법
1. 변수 : 클래스명.static변수
2. 메소드 : 클래스명.static메소드()
상수
- static의 이러한 성질을 이용하여 final 키워드와 같이 사용해 상수로 써 사용하기도 한다
(final 키워드는 변수를 변경할 수 없음을 의미한다.)
- 상수는 표준표기를 대문자를 원칙으로 하며 두단어 이상 조합시 '_' 를 이용하여 표기한다.
ex) public static final MATH_PI = 3.141592...;
언제 사용할까 ?
1. 모든 instance에서 같은 값을 가져야 하는 경우
ex) INTEL 에서 CPU를 제조한다고 가정하자
각 instance마다 제품번호는 다를지언정 제조회사는 모두 같을 것이다 이럴 경우
각각의 인스턴스에 제조사 변수를 만들 필요 없이 클래스 변수에 하나만 생성하여 메모리상의 이점을 볼 수 있다
1 2 3 4 5 6 7 8 9 | public class Cpu { private static String manufacturer = "INTEL"; private int productNo; public JjyMotel(int productNo) { this.productNo = productNo; } } | cs |
2. 모든 instance에서 하나의 변수를 공유 하는 경우
ex) 소 농장에서 새로운 송아지가 태어날 때마다 송아지의 수를 센다고 가정하자
인스턴스가 생성될때 인스턴스의 변수에 ++를 한다면 그 인스턴스만이 소유하는 변수이므로
또 하나의 인스턴스가 생성될때 이전 인스턴스를 참조하지 않고는 이전 인스턴스의 변수값을 증가 시킬 방법이 없다
이때 static 변수를 사용하게 된다면 모두 같은 메모리를 참조하게 되므로 증가 시킬 수 있다.
싱글톤 패턴과의 차이점 : http://galid1.tistory.com/146
'Language > Java' 카테고리의 다른 글
Java - 상속 super (1) | 2019.01.05 |
---|---|
Java - Call by Value와 Call by Reference (0) | 2018.12.14 |
Java - 초기화 순서 (0) | 2018.10.28 |
Java - 자바 가상머신(JVM: Java Virtual Machine) (0) | 2018.10.28 |
Java - 쓰레드 동기화 (Synchronized) (0) | 2018.08.26 |