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

jonghyeok097님의 프로필 이미지
jonghyeok097

작성한 질문수

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

다형성 시작

[다형성] 다형성 객체 생성과 참조에 관한 질문

해결된 질문

작성

·

107

·

수정됨

0

=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
다형성에 관해 명확한 이해가 조금 어려운 부분이 있어 질문 드립니다!

  1. 아래의 코드에서,

     

    1) 코드가 동작 가능한 이유는 '생성된 Child Class의 인스턴스에 Parent Class의 인스턴스가 포함되기 때문에, Parent Class의 참조값을 담을 수 있는 poly라는 변수에 Child Class 인스턴스 참조값을 저장할 수 있다.'

     

    반대로, 2) 코드가 동작 불가한 이유는 '생성된 Parent Class 인스턴스에는 Child Class의 인스턴스가 포함되지 않아서, Child Class의 참조값을 담는 poly2 라는 변수에 Parent Class 인스턴스 참조값을 저장할 수 없다.' 이렇게 이해했습니다. 제가 이해한 바가 맞을까요??

     

1) Parent poly = new Child();
2) Child poly2 = new Parent();

 

  1. 위의 이해가 맞다면, 1)코드에서 생성한 poly Parent Class변수는 Child 인스턴스를 생성했음에도 불구하고 Parent Class에만 접근할 수 있기에, Child 인스턴스에 대한 정보를 소실하는 것 처럼 보여집니다. Child 인스턴스 변수나 method에 접근하지 못함에도 Child 인스턴스를 포함하고 있는 것은 괜한 메모리를 사용하는 것은 아닌가 하는 생각이 드는데요,

     

    2-1) 위에 표현한 제 생각이 옳은 생각인지가 궁금합니다. 실제로 Child 인스턴스에 대한 정보를 소실하는 것일까요? 아니면 Child 인스턴스는 존재하지만, 접근 권한만 제한받는 것일까요??

     

    2-2) 실제 인스턴스에 대한 정보를 소실하는 것이라면, 다형성을 활용하는 이유가 궁금합니다. 이 질문은 지금까지 학습한 내용을 정리하고 넘어가고자 질문을 드린 상황이기에, 추후 강의에서 다뤄지는 내용이면 강의를 통해 배우겠습니다.

감사합니다!

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. jonghyeok097님

AI 인턴이 답변을 잘 해주었는데요. 추가로 강의 뒷 부분의 메서드 오버라이딩 같은 부분에서, 이런 부분들이 어떻게 사용되는지 이해하실 수 있을거에요.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

jonghyeok097님, 다형성에 대한 질문을 주셨군요! 질문 내용에 대해 답변드리겠습니다.

  1. 말씀하신대로, Parent poly = new Child();는 Child 인스턴스를 Parent 타입의 참조 변수로 참조할 수 있습니다. 이는 다형성의 기본 원리에 따른 것으로, 상위 클래스 타입의 참조 변수가 하위 클래스의 인스턴스를 참조할 수 있기 때문입니다. 반면에, Child poly2 = new Parent();는 Parent 인스턴스를 Child 타입의 참조 변수로 참조하려 시도하기 때문에, Java의 타입 체크에서 오류가 발생합니다. 이는 상위 클래스의 인스턴스가 하위 클래스의 모든 특성을 알 수 없기 때문입니다.

2-1) 위의 이해에 대해, 실제 Child 인스턴스에 대한 정보는 소실되지 않습니다. poly 참조 변수를 통해 직접적으로 Child 인스턴스의 메소드나 변수에 접근할 수 없는 것은 사실이지만, 이는 단지 참조하는 변수의 타입에 따른 접근 권한의 차이일 뿐입니다. 실제로는 해당 Child 인스턴스가 메모리에 존재하며, 해당 인스턴스가 가진 모든 속성과 메소드들도 intact 상태로 유지됩니다. 다형성을 이용하게 되면, 이러한 세부적인 타입보다는 더 추상적인 수준에서 객체를 다룰 수 있게 되는 장점이 있습니다.

2-2) 다형성을 활용하는 주된 이유는 코드의 유연성을 증가시키고, 객체 지향 프로그래밍에서의 다양성을 실현하기 위함입니다. 다형성을 이용하면 하나의 참조 변수로 여러 타입의 객체를 참조할 수 있게 되고, 이를 통해 다양한 기능을 하는 객체들을 같은 타입의 참조 변수로 관리하고, 사용할 수 있습니다. 이는 코드 재사용성을 높이고, 유지보수를 용이하게 합니다. 당장은 Child 인스턴스의 특정 기능에 접근하기 어렵다고 느낄 수 있지만, 이는 후에 인터페이스나 추상 클래스를 활용한 방법 등을 통해 해결할 수 있습니다.

다형성을 포함한 객체 지향 프로그래밍의 개념들은 초반에는 이해하기 어렵게 느껴질 수 있지만, 실제 프로젝트를 진행하면서 이러한 개념들이 어떻게 유용하게 쓰이는지를 체험하게 되면 더욱 명확해질 것입니다.

질문에 도움이 되었길 바랍니다. 추가로 궁금한 점이 있으시면 언제든지 질문해주세요!

jonghyeok097님의 프로필 이미지
jonghyeok097

작성한 질문수

질문하기