반응형
인터페이스
다중 상속을 받을 수 있다. 추상클래스와 달리 일반 변수와 함수를 선언할 수 없다.
즉 모든 함수가 텅빈 추상함수로만 구성되어 있다.
일반적으로 이름 앞에 I를 붙인다
interface IFlyable
{
}
인터페이스 안에는 어짜피 추상함수만 들어갈 수 있으므로 굳이 abstract를 안붙여도 된다.
interface IFlyable
{
abstract void Fly();
}
인터페이스 안의 함수는 접근 한정자를 쓰지 않는다. 모든 멤버는 public이 기본으로 지정된다.
interface IFlyable
{
void Fly();
}
나의 기능을 갖고 있는 애라면 fly라는 인터페이스 함수를 제공 있어야하는데 fly함수가 어떻게 구현해야하는지는 물려주지 않는다. 즉 필드를 포함하고 있지 않다.
class FlyPinkPig : Pig, IFlyable
{
}
상속받은 클래스들은 인터페이스의 멤버를 반드시 구현해줘야한다. 만약 구현하지 않으면 아래와 같은 오류가 발생한다.
class FlyPinkPig : Pig, IFlying
{
public void Fly()
{
}
}
flyable을 내포 하고 있는 애만 DoFly를 호출 할 수 있다.
static void DoFly(IFlyable flyable)
{
flyable.Fly();
}
class FlyPinkPig : Pig, IFlyable
{
public void Fly()
{
Console.WriteLine("날으는 돼징");
}
public override void Eat()
{
Console.WriteLine("먹기");
}
}
인터페이스는 인스턴스를 못만들지만 참조는 만들 수 있다. 참조를 통해서 해당 인터페이스를 상속 받는 클래스의 객체를 참조한다.
IFlyable flyable = new FlyPinkPig();
flyable.Fly();
Eat함수는 인터페이스 안의 추상함수가 아니므로 참조할 수 없다.
FlyPinkPig flyPinkPig = new FlyPinkPig();
DoFly(flyPinkPig);
본 게시글은 MMORPG Part1을 수강하고 정리한 글입니다.
반응형
'유니티 공부 > C# 문법' 카테고리의 다른 글
C# 문법 - property(프로퍼티) (0) | 2023.04.16 |
---|---|
C# 문법 - virtual vs abstract vs interface (0) | 2023.04.16 |
C# 문법 - abstract (0) | 2023.04.14 |
C# 문법 - overloading(오버로딩) vs overriding(오버라이딩) (0) | 2023.04.12 |
C# 문법 - 다형성(virtual, override) (0) | 2023.04.12 |
댓글