{
를 만나면){
, }
(중괄호) block으로 되어 있는 것도 각각의 stack 프레임을 만든다. (main 메서드 안에서 stack frame을 만든다)}
만나면 사라진다}
를 만나면)지역변수 : stack 프레임 안에서 값 존재
클래스 멤버 변수(static 변수) : static 영역 (Method Area)에 값 존재
객체 멤버 변수 : heap 영역에 존재. gc의 대상이 된다.
Animal
클래스를 상속한 Penguin
클래스가 있다면, Penguin
클래스를 new로 인스턴스화 하면heap 영역에 Penguin
과 Animal
둘 다 만들어 진다.public class Application {
private int integerNum;
private double doubleNum;
private Object object;
private boolean bool;
public static void main(String[] args) {
print();
}
private static void print() {
Application application = new Application();
System.out.println(application.integerNum);
System.out.println(application.doubleNum);
System.out.println(application.object);
System.out.println(application.bool);
}
}
// 결과:
// 0
// 0.0
// null
// false
메서드는 서로의 고유 공간. 서로 침범하면 무단 침입으로 자바 월드에 문제를 유발 할 수 있기 때문
포인터의 문제.
책의 예제에서는 main()
에서 square()
메서드를 호출하지만, 실전에서는 사용되는 메서드는 다양한 곳으로부터 호출된다. 이때, 호출하는 메서드 내부의 지역 변수를 호출당하는 쪽에서 제어할 수 있게 코드를 만들려면 결국 포인터를 주고 받아야한다.
→ 스택 프레임의 구조가 항시 변하기 때문에