static_
- static 자료형 변수 이름;으로 선언
ex) static int name;
- 여러개의 인스턴스가 같은 메모리의 값을 공유하기 위해 사용
- 인스턴스의 생성과 관계없이 클래스 이름으로 직접 메서드 호출
- static 메서드에서는 생성이 불확실한 인스턴스 변수를 사용할 수 없음
각 변수 별 실행 시점_
변수 유형 | 선언 위치 | 사용 범위 | 메모리 | 생성과 소멸 |
지역 변수 (로컬 변수) |
함수 내부에 선언 | 함수 내부에서만 사용 | 스택 | 함수가 호출될때 생성되고 함수가 끝나면 소멸 |
멤버 변수 (인스턴스 변수) |
클래스 멤버 변수로 선언 | 클래스 내부에서 사용하고 private이 아니면 참조 변수로 다른 클래스에서 사용 가능 | 힙 | 인스턴스가 생성될 때 힙에 생성되며 가비지 컬렉터가 메모리를 수거할 때 소멸 |
static 변수 (클래스 변수) |
static 예약어를 사용해 클래스 내부에 선언 | 클래스 내부에서 사용하고 private이 아니면 클래스 이름으로 다른 클래스에서 사용 가능 | 데이터 영역 | 프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 때 소멸 됨 |
ex)
int num;
static int serialNum = 100;
public static int getNum( ){
int i = 10; // 지역 변수 => getNum 메서드가 호출될 때 생성되며 메서드가 끝나면 소멸
//num = 1; // 멤버 변수(인스턴스 변수) => 인스턴스가 먼저 생성되어야 하므로 static메서드에서 사용 불가
return serialNum; // static 변수(클래스 변수) => 프로그램이 시작할 때 생성되며 프로그램이 끝나고 소멸
}
반응형