inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 자바 - 기본편

상속과 메모리 구조

알고 있던 내용과 달라서 조금 혼동됩니다.

해결된 질문

440

TH Kwon

작성한 질문수 4

0

안녕하세요 영한님. 자바를 복습하고 있는 학생입니다.

 

이번 파트 정말 이해가 잘 되게 설명해주셔서 내용을 이해하는데는 어려움이 없었는데 기존에 알고 있던 지식때문인지 혼동되는 부분이 있어 질문드립니다.

 

기존에 알고 있는 지식은 자식 인스턴스 생성시 '부모의 필드 값과 가상 메서드 테이블 등의 메타 정보를 포함하는 하나의 인스턴스 생성'이었습니다.

 

그런데 이번 강의 내용에선 '외부에서 볼때는 하나의 인스턴스를 생성하는 것 같지만 내부에서는 부모와 자식 모두 생성되고 공간도 구분'이라고 하셨습니다. 그렇다면 이 문장을 '부모부터 자식 클래스까지의 모든 인스턴스를 생성'이라고 봐야하나요? 아니면 '부모부터 자식까지의 모든 메타 정보를 포함하는 하나의 인스턴스를 생성'이라고 봐야하나요?

 

뒤에서 배울 super()를 통해 자식 인스턴스 생성시 부모 생성자를 필수로 호출하므로 '모든 인스턴스'를 생성하는 것도 말이 될 거 같지만 만약 모든 인스턴스를 메모리에 생성한다면 메모리가 비효율적으로 사용되는 것도 같아 이 부분이 좀 헷갈립니다.

java 객체지향

답변 1

2

김영한

안녕하세요. TH Kwon님

자바에서 상속을 사용할 때, 자식 클래스의 인스턴스를 생성하면 내부적으로는 부모 클래스의 인스턴스도 함께 생성됩니다. 이는 자식 클래스가 부모 클래스의 멤버(필드와 메서드)를 상속받기 때문입니다.

하지만 실제로 생성되는 객체는 자식 클래스의 인스턴스 하나입니다. 이 인스턴스 내부에는 부모 클래스의 멤버들이 포함되어 있습니다. 따라서 메모리 공간을 비효율적으로 사용하지 않습니다.

정리하면 다음과 같습니다:

  1. 자식 클래스의 인스턴스를 생성할 때, 부모 클래스의 인스턴스도 내부적으로 함께 생성됩니다.

  2. 하지만 실제로 메모리에 할당되는 객체는 자식 클래스의 인스턴스 하나입니다.

  3. 이 인스턴스에는 부모 클래스의 멤버(필드와 메서드)가 포함되어 있습니다.

     

따라서 "부모부터 자식까지의 모든 메타 정보를 포함하는 하나의 인스턴스를 생성"한다고 이해하시면 됩니다.

하지만 물리적으로 하나로 생성된다 할지라도, 뒤에서 설명할 다형성 개념을 이해하기 위해서 논리적으로는 분리해서 생성된다고 이해하는 것이 좋습니다.

super()를 통해 부모 클래스의 생성자를 호출하는 것은 부모 클래스의 인스턴스를 초기화하기 위함입니다. 이는 상속 관계에서 객체를 올바르게 생성하고 초기화하는 데 필요한 과정입니다.

감사합니다.

1

TH Kwon

답변 감사합니다! 스프링 강의에서 강조하셨던 추상과 구현의 구분처럼 논리적인 구조와 물리적인 구조 둘로 쪼개어 이해하니 더 잘 이해되네요.

질문있습니다

0

28

1

1번 문제 질문입니다.

0

33

1

음악플레이어 문제 중 코드질문

0

26

1

9장 상속 문제와 풀이 질문

0

38

1

강의 자료에 사소한 오타가 있습니다.

0

50

2

매서드 참조값 반환??

0

66

1

접근제어자 - 쇼핑카트 문제에서 상품출력 부분 메서드

0

70

1

자바 기본편 - .(dot)에 관한 질문입니다!

0

85

1

공부방법

0

76

2

상속관계에서 멤버 변수는 오버라이딩 되는 개념이 아닌가요?

0

82

1

static method 질문

0

66

1

캡슐화 문제풀이 ShoppingCart 요구사항에 문제가 있어보입니다. 피드백 주세요

0

97

1

Method1에서 Student 객체

0

74

1

3강 18. null 질문

0

69

1

this 와 super의 호출 순서는 부모-자식관계 떄문만인가요?

0

75

1

팩토리 메서드 패턴과 일반 생성자 사용의 장단점

0

97

1

문의

0

104

1

9장 상속 문제와 풀이 부분 궁금한게 있어서 질문드립니다

0

90

1

상속과 그에 따른 메모리 구조 질문

0

62

1

call메소드에서 멤버에 접근하는 방식을 이해 못 했습니다

0

74

1

수강기한

0

136

1

기본편 객체지향 프로그래밍에 대한 정의

0

87

1

섹션10 상속 메모리 구조 및 문제 관련 질문

0

87

1

추가 지식 학습

0

152

2