[C#] 19. 다이아몬드 문제(Diamond problem)

Connected Brain·2025년 4월 25일

면접 질문 대비

목록 보기
19/60

클래스 상속에서 다이아몬드 문제(diamond problem)가 발생하는 이유와 이를 해결하는 방법에 대해 설명해주세요.

한 줄 요약

다이아몬드 문제 : 다중 상속을 허용할 경우 두 개의 상위 클래스에서 구현된 것 중 어떤 건을 자식에서 채택해야할 지 불분명해지는 문제가 발생
(인터페이스는 구현을 포함하지 않으므로 다중 상속 가능)

다이아몬드 문제(diamond problem)

  • 다이아몬드 문제는 다중 상속으로 인해 발생할 수 있는 모호성으로 인한 문제를 말한다.
abstract class GrandParent{ public abstract void TestMethod(); }
class Parent1 : GrandParent {public void TestMethod() {};}
class parent2 : GrandParent {public void TestMethod() {};}

class Child : Parent1, Parent2 
{
	void Initialize()
    {
    	TestMethod() //Parent1, Parent2 중에서 어떤 메서드를 실행할지 불분명
    }
    
} 
  • 위의 상황이 다중 상속으로 인해 발생하는 다이아몬드 문제이다. 해당 문제를 해결하기 위해 클래스의 다중 상속은 사용할 수 없고, 인터페이스에 대해서는 다중 상속이 허용 된다.
interface IGrandParent{ public void TestMethod(); }
interface IParent1 : IGrandParent {public void TestMethod();}
interface Iparent2 : IGrandParent {public void TestMethod();}

class Child : IParent1, IParent2 
{
	void Initialize()
    {
    	TestMethod()
    }
    
} 
  • 인터페이스는 본문을 구현하지 않으므로 클래스에서와 같은 문제가 발생하지 않을 수 있다.

0개의 댓글