이 블로그의 내용을 참조했습니다.
변수 - 클래스변수(정적할당=stack), 인스턴스 변수(동적할당=heap), 지역 변수(정적할당=stack) 3종류 있다.
멤버변수 중 static이 붙은 것 - 클래스 변수, 나머지는 인스턴스 변수
지역변수는 멤버변수를 제외한 나머지 모든 것
class Variables
{
int iv; //인스턴스 변수 -> 인스턴스 생성시
static in cv; //클래스 변수 -> 클래스가 메모리에 올라갈때
void method()
{
int Iv =0; //지역 변수
}
}
클래스가 메모리에 올라갈때는 언제이지?
클래스 변수는 인스턴스마다 독립적인 저장공간을 갖는 인스턴스변수와는 달리, 클래스 변수는 모든 인스턴스가 공통된 저장공간을 공유하게 된다.
클래스 변수는 인스턴스 변수와 달리 언제라도 바로 사용할 수 있고, 클래스이름.클래스변수 와 같은 형식으로 사용하게 된다.
클래스가 메모리에 로딩되어 프로그램이 종료될때까지 유지되며, public을 앞에 붙이면 같은 프로그램 내의 어디서나 접근 가능하다.
지역변수는 메소드가 종료되면 소멸된다. for문 혹은 while문 내에 선언된 지역변수는 지역 변수가 선언된 블럭 내에서만 사용가능하고, 블럭을 벗어나면 소멸되어 사용할 수 없게 된다.
→ 클래스 메소드는 프로그램 실행전에 로드되는데(정적) 인스턴트 메소드는 객체 생성 이후에 생성되기때문
→ 참조변수에 생성한 인스턴스를 할당하고 나서 클래스 메소드 호출은 가능하다.