클래스명 참조_변수명 = new 생성자();
ex) Person p = new Person();
new 키워드와 생성자를 통해 클래스의 객체를 생성한다는 것은 객체를 힙 메모리에 넣고 그 주소값을 참조변수에 저장하는 것과 같다.
클래스 Person
과 참조 변수 p
는 각각 클래스 영역과 스택 영역이라는 다른 위치에 저장된다.
생성자로 만들어진 인스턴스는 힙 메모리 영역에 들어가고 객체 내부에는 클래스의 멤버들이 위치한다.
참조변수는 객체의 실제값이 아닌 힙에 저장되어 있는 주소값을 가리키게 된다.
자바에서 변수는 크게 클래스 변수 (cv, class variable), 인스턴스 변수(iv, instatnce varuable), 그리고 지역변수(lv, local variable) 세가지로 구분된다
필드라고 부르는 클래스 변수, 인스턴스 변수는 static
키워드의 유무로 구분된다.
static
키워드가 함께 선언된 변수는 클래스 변수 인스턴스 변수(iv)는 인스턴스가 가지는 각각의 고유한 속성을 저장하기 위한 변수로 new 생성자()
를 통해 인스턴스가 생성될 때 만들어진다.
클래스 변수(cv)는 독립적인 저장 공간을 가지는 인스턴스 변수와 다르게 공통된 저장공간을 공유한다.
static
키워드를 사용하여 클래스 변수를 선언하게 된다.지역변수(lv)는 메서드 내에 선언되며 메서드 내({}블록)에서만 사용가능한 변수이다.
스택 메모리
에 저장되어 메서드가 종료되는 것과 동시에 함께 소멸되어 사용할 수 없게 된다.힙 메모리
에 저장되는 필드 변수는 객체가 없어지지 않는 한 절대로 삭제되지 않는 반면, 스택 메모리에 저장되는 지역변수는 한동안 사용되지 않는 경우 가상 머신에 의해 자동 삭제 된다.
힙 메모리
에는 빈 공간이 저장될 수 없기 때문에 이곳에 저장되는 필드는 강제로 초기화되지만, 스택 메모리
는 강제로 초기화되지 않으므로 지역 변수
는 선언시 반드시 초기화 해주어야 한다.