본문 바로가기
유니티 공부/C# 문법

C# 문법 - interface

by 코딩하는 돼징 2023. 4. 14.
반응형

인터페이스

다중 상속을 받을 수 있다. 추상클래스와 달리 일반 변수와 함수를 선언할 수 없다. 

즉 모든 함수가 텅빈 추상함수로만 구성되어 있다.

 

일반적으로 이름 앞에 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을 수강하고 정리한 글입니다.

https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part1/dashboard

반응형

댓글