인프런 커뮤니티 질문&답변

Bugeon Jo님의 프로필 이미지
Bugeon Jo

작성한 질문수

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

다형성과 메서드 오버라이딩

상속 관련해서 질문 있습니다.

작성

·

361

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]

다형성 오버라이딩 까지 강의를 보고 질문 드립니다.

지금까지 상속 관계에 대해 배웠을 때

처음에 든 생각은 상속이 tree 관계도를 만든다고 생각했습니다.

(예를 들어서 부모에게 자식이 여러 명 있을 수 있는 것처럼요)

그런데 수업에서 배운 내용을 보니

힙 영역에서 한 인스턴스 안에 부모가 한 명 있고 자식이 둘 이상인 경우는 존재하지 않는 것처럼 보였습니다.

물론 class 영역에서 한 부모를 여러 자식이 상속하는 경우는 가능하겠지만 instance를 만들 때는 자식 인스턴스를 만들 때마다 부모가 복제되서 생기는 것 같았습니다.

 

매소드 오버라이딩 부분을 보니까 한 인스턴스 안에 부모가 있을 때 자식이 여럿 있으면 안 될 것 같다는 확신이 들었습니다. 그게 맞다면 어느 자식의 method로 오버라이딩 되어야 할 지 정하기 어렵기 때문입니다.

 

만약 제가 데이터를 저장할 때

어떤 사람의 인적 정보를 person class에 저장하고

사람의 직업이 여러 개일 수 있으니까 직업들을 job1, job2 class라고 정의한다면

-----------------------------------

| person 부모class - job 1 자식 class

| - job 2 자식 class

-----------------------------------

이런 식으로 한 인스턴스 안에 데이터를 저장하는 것이 메모리를 효율적으로 쓰는 것이라고 생각했는데 java는 이런 걸 지원하지 않는 것처럼 보였습니다.

제 생각이 맞는지 궁금합니다.

 

 

 

 

 

답변 1

0

안녕하세요. Bugeon Jo님, 공식 서포터즈 코즈위버입니다.

상속과 인스턴스 힙 메모리에 대한 생각은 맞습니다.

여기서 생각해 보아야 하는 부분은 Job이 클래스로 관리해야 하는가 인데요, 코드처럼 사용하는 데이터라면 자바에서는 Enum을 사용하여 처리하는 경우가 일반적입니다.

'한 사람이 여러 직업을 가질수 있다'를 자바 코드로 표현하는 방법은 아래와 같습니다.

public class Person {
    JobCode[] jobs = []; // 이런식으로 배열로 표현하거나
    List<JobCode> jobs = new ArrayList(); // 나중에는 Collection 프레임워크를 사용.
}

enum JobCode {
   STUDENT,
   TEACHER,
   FARMER
}

 

물론 Job이 단순 코드가 아니라 클래스 레벨로 상승하는 경우에도 배열 혹은 콜렉션을 이용하여 일대다, 다대다를 표현합니다.

감사합니다.

Bugeon Jo님의 프로필 이미지
Bugeon Jo
질문자

네 답변 감사합니다

Bugeon Jo님의 프로필 이미지
Bugeon Jo

작성한 질문수

질문하기