진짜 개발자
본문 바로가기

Language/Java

Java - Static 이해

728x90

이전 시간에 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