객체에 할당되는 메모리 사이즈
- 객체의 종류에 따라 달라짐.
- 객체에 메모리 할당 과정
- 아래 코드와 같이 객체를 선언
- JVM이 4 bytes 블록을 s에 할당
- 할당된 블록이 heap에 있는 공간을 가리킴.
- heap에는 Student class에 필요한 메모리 양을 계산하여 그만큼 heap에 할당되어 있음.
- Student class 안에 선언된 모든 변수들을 계산하여 필요한 메모리 양 계산.
- JVM은 Student가 무엇인지, 어디서 온 것인지(어디서 상속된 것인지) 알아야 heap에 얼마의 공간을 할당할지 결정할 수 있음.
Student s = new Student();
상속
- 여러 개의 객체가 있으면 상속을 활용하여 객체 간의 관계를 나타낼 수 있음.
- 다음과 같은 구조를 이용하여 상속 받을 수 있음.
* 아 코드를 기억하고 특징을 함께 보자.
public class Person{
}
public class Student extends Person{
}
public class Undergraduate extends Student{
}
상속 특징
- Java에서 각 클래스는 하나의 클래스만 상속받을 수 있음.
- 상속받는 클래스의 정보만 갖고 있음.
- 상속 트리 그림에서 학부생은 교직원이나 관리 직원들에 대한 정보는 가지고 있지 않음. 즉, 트리를 올라갈 수만 있음.
- 상속받는 클래스(부모 클래스)의 공간을 함께 할당
Undergraduate u = new Undergraduate();
- 상속받은 상태로 u를 정의
- u에는 4bytes 할당
- 이 포인터가 가리키는 힙에는 Undergraduate에 맞는 공간이 할당
- Student를 상속받았기 때문에 Student, Person 클래스에 들어 있는 모든 변수도 힙에 들어감.
Student s = new Undergraduate();
- 이렇게 s를 선언하면, Undergraduate 클래스에 필요한 만큼 공간을 할당받고, Person, Student, Undergraduate 변수 모두 알 수 있음.
- 따라서, Student 클래스의 변수를 파악하고 메모리를 계산할 수 있다.
Undergraduate u = new Student(); // X
- 이렇게 선언할 수 없음.
- 이 경우 heap에 할당되는 공간은 Student에 해당되는 만큼임.
- 하지만 Undergraduate 클래스의 내용은 접근할 수 없고, Studetn, Person에 포함된 내용만 알 수 있기 때문에 컴파일되지 않음.
- 참고
'Java' 카테고리의 다른 글
[Java 06] Generic Programming (0) | 2023.08.09 |
---|---|
[Java 05] 객체 비교 - equals(), Comparable (0) | 2023.08.09 |
[Java 03] 객체지향 프로그래밍 1 - 객체, 클래스, OOP란? (0) | 2023.07.20 |
[Java 02] 배열 생성과 주의 사항, 다차원 배열 (2) | 2023.07.19 |
[Java 01] 연산자 우선 순위 (0) | 2023.07.18 |