해결된 질문
작성
·
107
·
수정됨
0
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
다형성에 관해 명확한 이해가 조금 어려운 부분이 있어 질문 드립니다!
아래의 코드에서,
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)코드에서 생성한 poly Parent Class변수는 Child 인스턴스를 생성했음에도 불구하고 Parent Class에만 접근할 수 있기에, Child 인스턴스에 대한 정보를 소실하는 것 처럼 보여집니다. Child 인스턴스 변수나 method에 접근하지 못함에도 Child 인스턴스를 포함하고 있는 것은 괜한 메모리를 사용하는 것은 아닌가 하는 생각이 드는데요,
2-1) 위에 표현한 제 생각이 옳은 생각인지가 궁금합니다. 실제로 Child 인스턴스에 대한 정보를 소실하는 것일까요? 아니면 Child 인스턴스는 존재하지만, 접근 권한만 제한받는 것일까요??
2-2) 실제 인스턴스에 대한 정보를 소실하는 것이라면, 다형성을 활용하는 이유가 궁금합니다. 이 질문은 지금까지 학습한 내용을 정리하고 넘어가고자 질문을 드린 상황이기에, 추후 강의에서 다뤄지는 내용이면 강의를 통해 배우겠습니다.
감사합니다!
답변 2
0
안녕하세요. jonghyeok097님
AI 인턴이 답변을 잘 해주었는데요. 추가로 강의 뒷 부분의 메서드 오버라이딩 같은 부분에서, 이런 부분들이 어떻게 사용되는지 이해하실 수 있을거에요.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
jonghyeok097님, 다형성에 대한 질문을 주셨군요! 질문 내용에 대해 답변드리겠습니다.
Parent poly = new Child();
는 Child 인스턴스를 Parent 타입의 참조 변수로 참조할 수 있습니다. 이는 다형성의 기본 원리에 따른 것으로, 상위 클래스 타입의 참조 변수가 하위 클래스의 인스턴스를 참조할 수 있기 때문입니다. 반면에, Child poly2 = new Parent();
는 Parent 인스턴스를 Child 타입의 참조 변수로 참조하려 시도하기 때문에, Java의 타입 체크에서 오류가 발생합니다. 이는 상위 클래스의 인스턴스가 하위 클래스의 모든 특성을 알 수 없기 때문입니다.2-1) 위의 이해에 대해, 실제 Child 인스턴스에 대한 정보는 소실되지 않습니다. poly 참조 변수를 통해 직접적으로 Child 인스턴스의 메소드나 변수에 접근할 수 없는 것은 사실이지만, 이는 단지 참조하는 변수의 타입에 따른 접근 권한의 차이일 뿐입니다. 실제로는 해당 Child 인스턴스가 메모리에 존재하며, 해당 인스턴스가 가진 모든 속성과 메소드들도 intact 상태로 유지됩니다. 다형성을 이용하게 되면, 이러한 세부적인 타입보다는 더 추상적인 수준에서 객체를 다룰 수 있게 되는 장점이 있습니다.
2-2) 다형성을 활용하는 주된 이유는 코드의 유연성을 증가시키고, 객체 지향 프로그래밍에서의 다양성을 실현하기 위함입니다. 다형성을 이용하면 하나의 참조 변수로 여러 타입의 객체를 참조할 수 있게 되고, 이를 통해 다양한 기능을 하는 객체들을 같은 타입의 참조 변수로 관리하고, 사용할 수 있습니다. 이는 코드 재사용성을 높이고, 유지보수를 용이하게 합니다. 당장은 Child 인스턴스의 특정 기능에 접근하기 어렵다고 느낄 수 있지만, 이는 후에 인터페이스나 추상 클래스를 활용한 방법 등을 통해 해결할 수 있습니다.
다형성을 포함한 객체 지향 프로그래밍의 개념들은 초반에는 이해하기 어렵게 느껴질 수 있지만, 실제 프로젝트를 진행하면서 이러한 개념들이 어떻게 유용하게 쓰이는지를 체험하게 되면 더욱 명확해질 것입니다.
질문에 도움이 되었길 바랍니다. 추가로 궁금한 점이 있으시면 언제든지 질문해주세요!