작성
·
32
·
수정됨
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
해당 그림에서 왼쪽 박스는 new ElectricCar()를 호출했을 때 생성되는 참조값 x001으로 스택영역에
보관되는 electricCar = x001 인 것이고, 오른쪽의 박스는 x001을 참조값으로 가지는 객체의 메서드
(Car의 move()와 ElectricCar의 change())가 보관된 메서드 영역을 뜻하는 것인가요?
(섹션10 상속 문제) Album album = new Album("앨범1", 15000, "seo")을 호출할 때, album = x001이라는 변수와 참조값이 스택영역에 저장됩니다. 이때
"앨범1" 즉 Strin name과 15000 즉 int price는 Album의 부모인 Item의 생성자 매개변수입니다.
최종적으로 힙 영역의 x001위치에 Album 객체가 생성되어 name = "앨범1", price = 15000, artist = "seo" 필드값이 들어있을 것입니다.
그렇다면 이때 이 필드값들이 위 그림의 오른쪽 박스처럼 x001 이라는 참조값을 가지는 하나의 Album
객체안에 Item("앨범1", 15000)과 Album(artist)로 각각 존재하는 것인가요?
(하나의 객체이지만 그 안에 Item 파트와 Album 파트로 각각 존재하는 것인지)
결론적으로 힙 영역 객체가 Item의 필드2개와 Album의 필드1개를 모두 가지고 있는 단일 객체로
존재하는 것이고, 스택 영역에는 그 객체를 가리키는 참조값이 저장되는 구조가 맞는지 여쭤보고싶습니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 김은수님.
질문해주신 상속과 메모리 구조에 대한 학습 내용과 관련된 부분을 설명드리겠습니다. 여러분이 말한 메모리 구조, 특히 힙과 스택에서 객체와 참조가 어떻게 이루어지는지에 대해 알아보겠습니다.
스택 영역: 함수 호출에 대한 정보가 저장되는 영역으로, 지역 변수와 참조(포인터)가 저장됩니다. 예를 들어 ElectricCar electricCar = new ElectricCar();
라는 코드를 실행하면, electricCar
라는 참조가 스택에 저장됩니다.
힙 영역: 실제 객체가 생성되어 저장되는 영역입니다. new ElectricCar()
로 생성된 ElectricCar
객체의 메모리가 실제로 할당되는 곳입니다. 해당 객체는 Car
클래스의 move()
메서드와 ElectricCar
클래스의 charge()
메서드를 포함합니다. 이는 메서드와 관련된 정보가 클래스 영역에 저장되며, 실제 객체는 필드 값만을 저장하게 됩니다.
Item과 Album의 관계: Album
은 Item
을 상속받는다는 것을 가정할 때, Album
객체는 Item
에서 상속받은 필드들을 포함하게 됩니다.
힙 영역의 객체: 당신이 말씀하신 것처럼 x001
참조는 하나의 Album
객체를 가리키며, 이 객체는 Item
으로부터 상속받은 필드 name
과 price
, 그리고 Album
의 고유 필드 artist
를 포함합니다. 따라서 Album
객체는 Item
과 Album
의 필드를 모두 가질 수 있는 하나의 객체로 존재하게 됩니다.
Album
객체는 Item
의 필드 2개와 Album
의 필드 1개를 모두 포함하는 단일 객체로서 존재합니다.album = x001
이라는 참조는 스택에 위치하며, 이 참조가 힙의 Album
객체를 가리킵니다.질문하신 사항에 대한 그림과 더불어 추가적인 예시과 설명이 필요한 부분에 대해 다음 링크들을 추천드릴 수 있습니다:
- 상속과 다형성의 이해 - 메서드 호출
위 예시들은 상속 관계에서 객체가 메모리 상에서 어떻게 저장되고 관리되는지 이해하는데 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.