Java/공부

10. Static

pakms980319 2024. 3. 5. 11:20

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