호빵의 IT 개발소

[C#] Interface 본문

C#, 유니티/C# 기초

[C#] Interface

호빵Stack 2022. 1. 9. 01:03

abstract

C#에서는 다중으로 추상클래스를 상속할 수 없습니다. (C++에서는 가능)

사용범위가 굉장히 제한되어 있다.

class Program
{
    abstract class Monster //추상클래스
    {
    	public abstract void  Shout(); //자식 클래스에서 Shout를 무조건 override를 해야함
        
    }
    
    class Orc : Monster
    {
    	public override void Shout()
        {
        	Console.WriteLine("우어어!!!!!");
        }
    }
    
    class Skeleton : Monster
    {
    	public override void Shout()
        {
        	Console.WriteLine("끼에엑!!");
        }
    }
    
    static void Main(string[] args)
    {
    	//Monster monster = new Monster(); - Program.Monster 추상 클래스 또는 인터페이스의 인스턴스를 만들 수 없음.
    }
}

 

interface

여러개의 interface를 동시에 가지고 있어도 문제가 없다.

인터페이스를 사용할때는 구현을 하지 않고 어떤 모양인지만 나타낸 다음 실제로 사용 할 때는 상속 받은 곳에서 직접 구현을 해주어야 합니다.

class Program
{
    abstract class Monster //추상클래스
    {
    	public abstract void  Shout(); //자식 클래스에서 Shout를 무조건 override를 해야함
        
    }
    
    interface IFlyable
    {
    	void Fly(); //fly라는 모양만 잡아준다.
    }
    
    class Orc : Monster
    {
    	public override void Shout()
        {
        	Console.WriteLine("우어어!!!!!");
        }
    }
    
    class FlyOrc : Orc, IFlyable //interface를 이용한 다중 상속
    {
    	public void Fly() //fly를 여기서 직접 구현한다.
        {
        	
        }
    }
    
    class Skeleton : Monster
    {
    	public override void Shout()
        {
        	Console.WriteLine("끼에엑!!");
        }
    }
    
    static void Main(string[] args)
    {
    	//Monster monster = new Monster(); - Program.Monster 추상 클래스 또는 인터페이스의 인스턴스를 만들 수 없음.
    }
}

 

※우리가 추상클래스 혹은 인터페이스를 사용하는 이유는 어떤 특정 클래스가 내가 원하는 인터페이스에 즉 특정 시그니처의 기능을 제공하기 위해 사용하는 것입니다. 

 

 

 

---------------------------------------------------------------------------------------------------------------------------

참고 : [인프런] Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

'C#, 유니티 > C# 기초' 카테고리의 다른 글

[C#] Delegate (대리자)  (0) 2022.01.09
[C#] Property  (0) 2022.01.09
[C#] Generic(일반화), object  (0) 2022.01.09
[C#] 문자열  (0) 2022.01.04
[C#] 다형성  (0) 2022.01.03
Comments