C#
C#) interface 인터페이스
그린티라떼
2022. 1. 13. 22:20
abstract class Monster
{
public abstract void Shout();
}
class Orc : Monster
{
public override void Shout()
{
Console.WriteLine("orc orc!");
}
}
class Skeleton : Monster
{
public override void Shout()
{
Console.WriteLine("kele kele!");
}
}
추상 클래스 Monster안에 추상 메서드 Shout()를 만들고
추상 클래스 Monster를 상속 받는 Orc 와 Skeleton이 있다.
class SkeletonOrc : Orc, Skeleton
{
}
끔찍한 혼종 SkeletonOrc를 만들려고 한다. 그러려면 Orc와 Skeleton을 같이 상속받아야 하는데 C#에서는 다중 상속을 지원하지 않아 오류가 생긴다. (C++에서는 지원하고 있다.)
다중 상속의 문제점 : SkeletonOrc와 같은 경우 Shout() override시 Orc의 Shout()를 사용할 것 인지, Skeleton의 Shout()를 사용할
것인지 문제가 생긴다. ( 죽음의 다이아몬드)
위 문제점을 해결하기 위해서 interface를 사용해야 한다.
interface IFlyable
{
void Fly();
}
class FlyableOrc : Orc, IFlyable
{
public void Fly()
{
Console.WriteLine("I can fly!");
}
}
FlyableOrc orc = new FlyableOrc();
orc.Fly();
orc.Shout();
FlyableOrc객체인 orc는 Fly()와 Shout()를 사용할 수 있다.
void DoFly(IFlyable flyable)
{
flyable.Fly();
}
FlyableOrc orc = new FlyableOrc();
DoFly(orc);
IFlyable가 있는 객체만 DoFly()를 사용할 수 있게 할 수도 있다.