[Java 04] 객체와 상속

객체에 할당되는 메모리 사이즈

  • 객체의 종류에 따라 달라짐.
  • 객체에 메모리 할당 과정
    1. 아래 코드와 같이 객체를 선언
    2. JVM이 4 bytes 블록을 s에 할당
    3. 할당된 블록이 heap에 있는 공간을 가리킴.
    4. 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에 포함된 내용만 알 수 있기 때문에 컴파일되지 않음.

 

 

 


 

  • 참고
 

자바로 구현하고 배우는 자료구조

부스트코스 무료 강의

www.boostcourse.org