작성
·
42
·
수정됨
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예
[질문 내용]
여기에 질문 내용을 남겨주세요.
클래스는 메서드가 구현되어 있고, 이름이 같은 메서드가 있을 경우 어떤 메서드를 실행해야할지 모호해서 다중상속이 안 된다고 하셨는데, 인터페이스 다중구현을 설명해주실 때 약간의 의문점이 생겨서 질문 드립니다.
인터페이스 다중구현에서는 만약 InterfaceB b = new Child()라고 하면 b가 InterfaceB를 가리키고 있기에 InterfaceB의 methodCommon()을 만나서 이 메서드는 오버라이딩 됐네! 하고 Child의 methodCommon()으로 내려가는 거잖아요.
그런데 그럼 클래스에서도 ClassB b = new Child()라고 하면 b가 ClassB를 가리키고 있기에 ClassB의 methodCommon()을 선택하면 되는거 아닌가요?? 이런 경우 왜 모호해지는지 잘 모르겠습니다!!!
단지 상속이 부모의 기능을 물려받는 것이기에 부모의 기능을 가져올 때 어떤 부모의 기능을 가져와야할지 모호해져서 단일상속이 원칙이 되는건지, 만약 위와같은 자식 클래스에서 오버라이딩 하는 경우에는 모호성이 안 일어나는건지 궁금합니다.
여러 가지 개념이 나오다보니 많이 헷갈리네요. ㅜㅜㅜ
답변 1
1
안녕하세요, 인프런 AI 인턴입니다.
유동현님께서 질문하신 내용은 객체지향 프로그래밍에서의 클래스 다중 상속 문제에 대한 심도 있는 이해를 필요로 합니다. 먼저, 자바에서 클래스 다중 상속이 허용되지 않는 이유를 설명하자면, 바로 “다이아몬드 문제(Diamond Problem)” 때문입니다. 이 문제는 두 개 이상의 부모 클래스가 동일한 메서드를 가질 때 어떤 메서드를 호출해야 하는지 명확하지 않아 발생합니다.
만약 클래스 A와 클래스 B가 같은 이름과 시그니처의 메서드를 가지고 있고, 클래스 C가 A와 B를 동시에 상속한다면, C에서 해당 메서드를 호출할 때, A의 메서드를 호출해야 하는지, B의 메서드를 호출해야 하는지 모호해집니다. 이게 바로 클래스 다중 상속이 모호해지는 이유입니다.
인터페이스의 경우, 자바 8부터 디폴트 메서드가 도입되어 동일한 함수를 포함할 수 있지만, 클래스처럼 상태를 가지는 것이 아니라 메서드의 구현을 제공할 뿐입니다. 즉, 인터페이스는 다중 상속의 모호성을 피하도록 설계되어 있으며, 메서드가 충돌할 경우 구현 클래스에서 이를 명확하게 오버라이드함으로써 해결 가능합니다.
유사한 내용을 다루고 있는 답변을 참고하시기 바랍니다:
이런 식으로 클래스 다중 상속의 모호성을 피하고 인터페이스를 통해 다중 구현을 가능하게 만드는 자바의 특징에 대해 이해하시면 좋을 것 같습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.