본문 바로가기
카테고리 없음

자바 상속을 메모리 관점에서 이해하기

by silvertogold100 2025. 8. 7.
반응형

자바 상속을 메모리 관점에서 이해하기

자바의 상속(Inheritance)을 배울 때 "자식 클래스가 부모 클래스를 물려받는다"는 개념적 설명은 많이 들어보셨을 것입니다. 하지만 실제로 컴퓨터 메모리에서는 어떤 일이 일어나는 걸까요? 오늘은 상속을 메모리 관점에서 자세히 알아보겠습니다.

상속이란?

상속은 자식 클래스가 부모 클래스의 속성(멤버 변수)과 메서드를 물려받아 사용하는 객체 지향 프로그래밍의 핵심 개념입니다. 이를 통해 코드의 재사용성을 높이고, 클래스 간의 계층적인 관계를 구축할 수 있습니다.

하지만 컴퓨터 메모리 관점에서 상속은 단순히 "물려받는" 것이 아닙니다. 정확히는 부모 클래스의 메모리 구조를 확장하는 과정이라고 할 수 있어요.

메모리에서 일어나는 실제 과정

1. 독립적인 메모리 할당

많은 사람들이 오해하는 부분이 바로 "메모리 공유"입니다.

class Parent {
    int parentValue = 10;
    
    void parentMethod() {
        System.out.println("부모 메서드");
    }
}

class Child extends Parent {
    int childValue = 20;
    
    void childMethod() {
        System.out.println("자식 메서드");
    }
}

// 인스턴스 생성
Child child = new Child();

위 코드에서 Child 인스턴스를 생성하면, 메모리에는 다음과 같은 일이 일어납니다:

  • 부모 클래스의 멤버 변수: parentValue
  • 자식 클래스의 멤버 변수: childValue
  • 모든 변수가 포함된 새로운 메모리 공간이 할당됩니다

🔍 핵심 포인트: 메모리를 "공유"하는 것이 아니라, 부모 클래스의 청사진(blueprint)을 바탕으로 자식 클래스 인스턴스에 필요한 완전히 새로운 메모리를 할당하는 것입니다.

2. 메서드의 효율적인 재사용

변수와 달리 메서드는 다른 방식으로 처리됩니다:

  • 메서드 코드는 메모리 상에 한 번만 존재합니다
  • 자식 클래스 인스턴스가 부모 클래스의 메서드를 호출하면, 동일한 메모리 위치를 참조합니다
  • 이것이 바로 **"메서드 코드의 공유"**입니다
Child child1 = new Child();
Child child2 = new Child();

// 두 인스턴스는 서로 다른 메모리 공간을 가지지만,
// parentMethod()는 같은 메모리 위치의 코드를 실행합니다
child1.parentMethod(); // 동일한 메서드 코드 참조
child2.parentMethod(); // 동일한 메서드 코드 참조

메모리 구조 시각화

[Child 인스턴스 메모리]
┌─────────────────────┐
│   parentValue: 10   │ ← 부모 클래스 변수 (새로 할당)
├─────────────────────┤
│   childValue: 20    │ ← 자식 클래스 변수 (새로 할당)
└─────────────────────┘

[메서드 영역]
┌─────────────────────┐
│   parentMethod()    │ ← 모든 인스턴스가 공유
│   childMethod()     │
└─────────────────────┘

왜 이렇게 설계되었을까?

  1. 메모리 효율성: 메서드 코드를 한 번만 저장하여 메모리를 절약
  2. 데이터 독립성: 각 인스턴스의 데이터는 독립적으로 관리하여 안전성 확보
  3. 상속의 유연성: 자식 클래스에서 부모의 데이터를 자유롭게 확장 가능

정리

자바의 상속을 메모리 관점에서 정리하면:

  • 변수(데이터): 각 인스턴스마다 독립적으로 새로운 메모리 할당
  • 메서드(기능): 모든 인스턴스가 동일한 코드를 공유

이러한 메커니즘을 이해하면 상속이 단순히 "물려받는" 개념이 아니라, 효율적이고 체계적인 메모리 관리 전략임을 알 수 있습니다. 이는 자바가 객체 지향 프로그래밍의 장점을 최대화하면서도 시스템 자원을 효율적으로 사용할 수 있게 해주는 핵심 원리입니다.


다음 포스트에서는 메서드 오버라이딩과 다형성이 메모리에서 어떻게 구현되는지 알아보겠습니다!

반응형