Static
Static은 고정된이란 의미를 가지고 있다. Static이라는 키워드를 사용하여 Static 변수와 Static 메서드를 만들 수 있는데 다른말로 정적 필드와 정적 메서드라고도 하며 이 둘을 합쳐 정적 멤버 (클래스 멤버) 라고 한다.
정적 필드와 정적 메서드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버이다. 그렇기에 클래스 로더가 클래스를 로딩해서 메서드 메모리 영역에 적재할 때 클래스별로 관리된다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용할 수 있다.
1. 정적(Static) 멤버 생성
Static 키워드를 통해 생성된 정적멤버들은 Heap 영역이 아닌 Stack 영역에 할당된다. Static 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서든지 참조할 수 있는 장점을 가지지만 Garbage Collector의 관리 영역 밖에 존재하기에 Static 영역에 있는 멤버들은 프로글매의 종료시까지 메모리가 할당된 채로 존재하게 된다. 그렇기에 너무 남발하여 사용하면 시스템 성능에 악영향을 줄 수 있다.
2. 정적(Static) 멤버 선언
필드나 메서드를 생성 시 인스턴스로 생성할 것인지 정적으로 생성할 것인지에 대한 판단 기준은 공용으로 사용하느냐 아니냐로 내리면 된다. 그냥 생성한다면 자동으로 인스턴스로 생성되며 정적으로 생성하려면 필드와 메서드 선언 시 static이라는 키워드를 추가적으로 붙이면 된다.
static int num = 0; // static 필드 public static void static_method(){} // static 메소드 |
3. 정적(Static) 필드 사용 예시
- 인스턴스 필드 num은 인스턴스가 생성될 때마다 새로 생성되므로 각기 다른 값을 가진다.
- 클래스(정적) 변수 num2는 모든 인스턴스가 하나의 저장공간을 공유하기에 항상 같은 값을 가진다.
4. 정적(Static) 메서드 사용 예시
- 정적 메서드는 인스턴스를 생성하지 않아도 호출 할 수 있다.
5. main 메서드의 static
- 자바 프로그램이 시작될 때 JVM(Java Virtual Machine)은 메인 메서드를 호출하여 프로그램의 실행을 시작한다.
- JVM은 클래스의 인스턴스를 생성하지 않고도 메인 메서드를 호출할 수 있어야한다. 따라서 메인 메서드는 클래스에 종속되지 않고 static으로 선언되었다.
5-1) main 메서드를 가진 클래스에서의 메서드 호출
- main 메서드를 가진 클래스에서 메서드와 변수를 선언하여 main 메서드에서 호출하려 할 때 에러가 발생한다.
- main 메서드는 프로그램의 시작점이므로, 인스턴스를 생성하지 않고 시작되기때문에 그 클래스의 멤버를 호출할 때는 static으로 선언된 멤버만 호출 할 수 있다.
출처
https://coding-factory.tistory.com/524
[Java] 자바 static의 의미와 사용법
정적(Static)이란? 정적(static)은 고정된이란 의미를 가지고 있습니다. Static이라는 키워드를 사용하여 Static변수와 Static메소드를 만들 수 있는데 다른말로 정적필드와 정적 메소드라고도 하며 이
coding-factory.tistory.com
'Java > 공부' 카테고리의 다른 글
0. UpDownCasting / instanceof (0) | 2024.03.11 |
---|---|
11. 참조형 (Reference type) (1) | 2024.03.05 |
9. 메서드 (0) | 2024.03.05 |
8. 반복문 (0) | 2024.03.05 |
7. 분기문 (0) | 2024.03.05 |