JVM(Java Virtual Machine) 메모리 구조
- Method Area
프로그램에서 클래스가 사용되면, 해당 클래스 파일을 읽어서 클래스에 대한 정보를 이곳에 저장한다.
클래스 변수(cv)도 이 영역에 생성된다.
- Call Stack
메서드 호출 시, 메서드의 작업에 필요한 메모리 공간을 제공한다.
호출된 메서드는 호출 스택에 쌓이게 되며, 호출 스택 최상단에 있는 메서드부터 실행된다.
메서드 작업을 위해 할당된 메모리에는 메서드가 작업을 수행하는 동안 지역변수, 연산의 중간 결과 등이 저장된다.
메서드가 작업을 마치면 메모리공간은 반환되고, 비워진다.
- Heap
프로그램 실행 중 생성되는 인스턴스가 저장되는 공간. 인스턴스 변수도 생성되어 저장된다.
참조형 변수
어떤 객체의 주소를 저장한다.
Car c = new Car();
선언된 참조변수 c 는 Car 클래스의 형태로 된 인스턴스의 주소를 담고 있다.
Car 클래스의 형태로 선언된 인스턴스들은 각자 고유한 값을 가질 수 있다.
선언된 인스턴스들은 Heap에 저장 되는데, 각자가 고유한 주소 값을 가지고 있다.
해당 주소를 참조형 변수에 저장하고, 참조 변수 사용 시, 주소로 접근하여 인스턴스의 속성을 사용하거나, 변경할 수 있다.
Car c1 = new Car();
Car c2 = new Car();
위처럼, 같은 설계도로 만든 차일지라도 c1과 c2는 별개의 자동차이다.
차에 있는 부품을 바꿔주던 기능을 사용하던 하기 위해서 각자의 차의 위치에 접근해야만 하고, 참조 변수는 자동차 별로 위치를 알려주는 역할을 한다고 할 수 있다.
제어자 static
제어자 static이 붙어 생성된 메서드와 변수를 각각 클래스 메서드, 클래스 변수라 부른다.
클래스 설계 시, 모든 인스턴스에서 공통적으로 사용될 것에 static을 붙인다.
ex) 포커 카드의 넓이, 높이 등
클래스 메서드와 클래스 변수는 인스턴스 생성 없이 사용이 가능하다.
- 클래스 메서드 호출 방법 : 클래스명.메서드명();
- 클래스 변수 호출 방법 : 클래스명.변수명;
클래스 메서드에서는 인스턴스 변수 사용이 불가한데, 그 이유는 클래스 메서드가 호출되었을 때 해당 인스턴스가
아직 생성되어있지 않을 수도 있기 때문이다.
'Java > 자바의 정석 3판' 카테고리의 다른 글
객체지향 프로그래밍(1) - 변수의 초기화 (0) | 2022.12.24 |
---|---|
객체지향 프로그래밍(1) - 생성자(Constructor) (0) | 2022.12.11 |
객체지향 프로그래밍(1) - 오버로딩(Overloading) (0) | 2022.12.04 |
객체지향 프로그래밍(1) - 변수와 메서드(1) (0) | 2022.11.27 |
객체지향 프로그래밍(1) - 객체지향이란? (1) | 2022.11.21 |