static
- static 제한자는 변수, 메서드에 적용되는 자바의 키워드
- static 메서드나 변수는 해당 클래스의 객체 없이도 참조 가능하다.
- static 블록(static 메서드, static 초기화자) 안에는 static 변수만 사용해야하고, static 메서드만 호출할 수 있다. 즉 static 블록에서 non-static 멤버를 객체 생성 없이 직접 참조할 수 없다.
- static 제한자는 지정된 변수와 메서드를 객체와 무관하게 만들어주기 때문에 this를 가질 수 없다.
- static 메서드는 non-static 메서드로 재정의(Overriding) 될 수 없다.
- static에 단순히 블록({ })을 사용한 경우에는 정적 초기화자라고 부르며, static 변수를 초기화하는 역할을 가지고 클래스가 로딩될 때 main() 메서드가 있더라도 그보다 앞서 딱 한 번 실행된다.
1.정적 변수(static variables)
- 클래스의 모든 인스턴스가 공유하는 변수를 선언할 때 사용한다.
- 클래스 이름을 통해 접근 가능하다.
- 인스턴스 변수가 객체마다 독립적인 반면, 정적 변수는 모든 객체에서 동일한 값을 가진다.
2.정적 메서드(static methods)
- static 메서드는 해당 클래스의 객체 생성 없이도 참조가 가능하다.
- static 메서드에서 멤버를 참조할 때 주의해야 할 사항은 "static 메서드 안에서는 non-static 멤버를 객체 생성 없이 직접 참조할 수 없다"
- static 메서드 안에서는 static 변수를 선언할 수 없다.
3. 정적 블록(static initializer Block)
- 정적 초기화 블록은 static 변수들의 초기화에 사용한다. 일반 멤버변수는 생성자에서 초기화하지만 static 변수는 객체 생성 없이도 사용해야하므로 생성자를 통해 초기화할 수 없다.
- static 변수는 정적초기화자를 통해 초기화를 합니다.
- 정적 초기화 블록은 클래스가 로드될 때 생성자와 main() 메서드에 앞서 오직 단 한 번만 실행된다.


[ key point ]
- static은 heap 영역에 저장되지 않는다.
- static은 클래스 로딩 시점에 한 번 초기화되고 모든 인스턴스에서 동일값을 가진다.
- static 사용은 동시성 문제때문에 최대한 피해야 한다.
'LANG.. > JAVA' 카테고리의 다른 글
final (0) | 2024.01.17 |
---|---|
[디자인 패턴] 템플릿 메소드 패턴 (Template Method Pattern) (1) | 2024.01.16 |
[디자인패턴] 싱글톤 패턴(Singleton Pattertn) (0) | 2024.01.16 |
객체 지향 프로그래밍(OOP) (0) | 2024.01.10 |
오버로딩과 오버라이딩 (0) | 2024.01.10 |