Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발새발

자바static 본문

자바기초 다시보기

자바static

개발하는후추 2023. 12. 21. 15:06
  • static 키워드는 주로 멤버 변수와 메서드에 사용된다.
package static1;

public class Data3 {

	public String name;
	public static int count; //static

	public Data3(String name) {
		this.name = name;
		count++;
	}
}
package static1;

public class DataCountMain3 {

public static void main(String[] args) {

	Data3 data1 = new Data3("A");
	System.out.println("A count=" + Data3.count);
	Data3 data2 = new Data3("B");
	System.out.println("B count=" + Data3.count);
	Data3 data3 = new Data3("C");
	System.out.println("C count=" + Data3.count);
	}
}

//결과 
A count=1
B count=2
C count=3 

  • static 이 붙은 멤버 변수는 메서드 영역에서 관리한다.
  • static 이 붙은 멤버 변수 count 는 인스턴스 영역에 생성되지 않는다. 대신에 메서드 영역에서 이 변수를 관리한다.
  • Data3("A") 인스턴스를 생성하면 생성자가 호출된다
  • 생성자에는 count++ 코드가 있다. count 는 static 이 붙은 정적 변수다. 정적 변수는 인스턴스 영역이 아니라 메서드 영역에서 관리한다. 따라서 이 경우 메서드 영역에 있는 count 의 값이 하나 증가된다.

멤버 변수(필드)의 종류

  • 인스턴스 변수: static 이 붙지 않은 멤버 변수, 예) name
    • static 이 붙지 않은 멤버 변수는 인스턴스를 생성해야 사용할 수 있고, 인스턴스에 소속되어 있다. 따라 서 인스턴스 변수라 한다.
    • 인스턴스 변수는 인스턴스를 만들 때 마다 새로 만들어진다.
  • 클래스 변수: static 이 붙은 멤버 변수, 예) count
    • 클래스 변수, 정적 변수, static 변수등으로 부른다. 용어를 모두 사용하니 주의하자
    • static 이 붙은 멤버 변수는 인스턴스와 무관하게 클래스에 바로 접근해서 사용할 수 있고, 클래스 자체에 소속되어 있다. 따라서 클래스 변수라 한다.
    • 클래스 변수는 자바 프로그램을 시작할 때 딱 1개가 만들어진다. 인스턴스와는 다르게 보통 여러곳에서 공 유하는 목적으로 사용된다.
    변수와 생명주기
  • 지역 변수(매개변수 포함) : 지역 변수는 스택 영역에 있는 스택 프레임 안에 보관된다.
    • 메서드가 종료되면 스택 프레임도 제거 되는데 이때 해당 스택 프레임에 포함된 지역 변수도 함께 제거된다.
    • 지역 변수는 생존 주기가짧다.
  • 인스턴스 변수 : 인스턴스에 있는 멤버 변수를 인스턴스 변수라 한다. 인스턴스 변수는 힙 영역을 사용한다.
    • 힙 영역은 GC(가비지 컬렉션)가 발생하기 전까지는 생존하기 때문에 보통 지역 변수보다 생존 주기가 길다.
  • 클래스 변수 : 클래스 변수는 메서드 영역의 static 영역에 보관되는 변수이다. 메서드 영역은 프로그램 전체에서사용하는 공용 공간이다.
    • 클래스 변수는 해당 클래스가 JVM에 로딩 되는 순간 생성된다. 그리고 JVM이 종료될때 까지 생명주기가 어어진다. 따라서 가장 긴 생명주기를 가진다.

'자바기초 다시보기' 카테고리의 다른 글

스택  (0) 2023.12.21
자바 메모리 구조  (0) 2023.12.21
접근 제어  (0) 2023.12.21
생성자 (Construct)  (0) 2023.12.20
객체 지향 프로그래밍 vs 절차 지향 프로그래밍  (1) 2023.12.20
Comments