TIL

TIL - 20230411

신동편 2023. 4. 12. 02:44
728x90

오늘은 자바 스터디때 할 내용을 미리 보다가 인터페이스의 다중 상속 충돌에 대해서 궁금증이 생겼었다.

스터디를 진행하는 방식이 먼저 문제를 만들어서 각자 풀어오고 자신의 풀이나 생각을 공유하는 형식이었는데,

 

 

인터페이스 다중 상속 충돌

A와 B, 두 개의 인터페이스가 있습니다. 두 인터페이스 모두 sameName이라는 이름의 메서드를 가지고 있습니다. 두 인터페이스를 모두 구현하는 (다중 상속) 클래스 C가 있다면, 두 인터페이스의 메서드를 어떻게 오버라이딩 할 수 있을까요?

 

라는 문제인데, A와 B, 각각의 인터페이스에서 sameName()이라는 메서드가 정의되어 있고, 그것을 C가 다중 상속을 받았을 때 어떻게 되는지 물어보는 것이다.

 

나는 C클래스에서 sameName()메서드를 구현하면 당연히 오버라이딩 되어서 컴파일 에러가 않나고 잘 실행될 것이라고 생각했다. 내가 알기로 메서드를 호출하는 것은 런타임단계에서 self참조를 통해서 상속계층도를 역순으로 탐색하며 진행되는데, 컴파일 단계에서는 각각의 인터페이스에 있는 이름이 같은 메서드를 C에서 구현하고 있으니 에러가 발생하지 않을 것이고, 런타임 단계에서는 위에서 말한 것처럼 자식클래스부터 찾아 올라가면 결국 오버라이딩 된 것을 먼저 찾아서 호출될 것이기 때문이다.

 

그런데, 인터페이스에서 선언된 메서드가 

정적메서드이거나 혹은 기본메서드이고, 구현부가 구현이 되어있을 때 C가 다중 상속을 받았을 때 충돌이 나게 되는데, 이 때 오버라이딩을 하면 위와 같은 이유로 에러가 발생하지 않을 텐데, 인터페이스에서 구현된 메서드를 호출하고 싶으면 어떻게 해야할지 의문이 들었다.

 

super를 쓰면 될 것 같긴 한데.. 다중 상속이라서 구분을 어떻게 해야하는 걸까라는 질문이 생긴 것이다.

결국 해결법은 인터페이스의 이름을 명시적으로 표시해주면 되는 것이었다.

 

A.super.sameName(); 이런 식으로 말이다.

 

오늘 스터디 내용은 인터페이스와 추상 클래스, 즉, 추상화에 대한 내용이었다.

이미 공부했었던 내용이라 다시 복기하는 느낌으로 진행하고 있다.

 

https://eastlight0418.tistory.com/36

 

자바(Java) - 객체지향 프로그래밍 2-3(Object - oriented Programming)

추상 클래스(abstract class) 클래스를 설계도에 비유한다면 추상 클래스는 미완성 설계도에 비유할 수 있다. 단어 뜻 그대로 완성되지 못한 채로 남겨진 설계도를 말하는데, 클래스가 미완성이라는

eastlight0418.tistory.com

 

728x90

'TIL' 카테고리의 다른 글

TIL - 20230425  (0) 2023.04.26
TIL - 20230424  (0) 2023.04.24
TIL - 20230417  (0) 2023.04.18
TIL - 20230408  (0) 2023.04.09
TIL - 20230407  (0) 2023.04.08