인터페이스란 클래스가 구현해야 하는 멤버들을 정의를 하지만 이를 직접 구현하지는 않아요.
// 아이템을 사용할 수 있는 인터페이스
public interface IUsable
{
void Use();
}
이런 식으로 인터페이스에서는 멤버에 대한 정의만 해요.
인터페이스는 보통 인터페이스임을 알리기 위해 접두사로 'I'를 사용합니다.
// 아이템 클래스
public class Item : IUsable
{
public string Name { get; set; }
public void Use()
{
Console.WriteLine("아이템 {0}을 사용했습니다.", Name);
}
}
// 플레이어 클래스
public class Player
{
public void UseItem(IUsable item)
{
item.Use();
}
}
// 게임 실행
static void Main()
{
Player player = new Player();
Item item = new Item { Name = "Health Potion" };
player.UseItem(item);
}
//실행 화면
아이템 Health Potion을 사용했습니다.
이렇게 인터페이스를 상속받은 클래스에서 직접적인 구현을 하고요.
인터페이스를 상속받았다면 상속받은 클래스내에서는 인터페이스의 모든 멤버에 대한 구현을 해줘야 해요.

인터페이스를 사용하는 이유로는 여러가지가 있는데요.
인터페이스와 추상클래스는 얼핏 비슷해 보이는데 둘의 차이는 무엇인지 어떤 장단점이 있을까요.
우선 인터페이스와 추상클래스는 모드 상속되어야 하며, 인스턴스화 할 수 없다는 공통점이 있어요.
하지만 인터페이스는 추상적인 동작만 정의하고, 구현을 갖지 않는 반면에 추상클래스는 일부 동작의 구현을 가지며, 추상메서드를 포함할 수 있어요. 인터페이스는 다중상속이 가능하지만 추상클래스는 단일상속만 가능하다는 점도 있네요.
인터페이스는 클래스들간의 결합도를 낮추고, 유연한 상호작용을 가능하게 하고 코드의 재사용성과 확장성을 향상시키는 장점을 가지지만 인터페이스를 구현하는 클래스가 모든 동작을 구현해야 하는 의무를 가지기 때문에 작업량이 증가할 수 있는 단점을 가지고 있어요.
추상클래스는 공통된 동작을 추상화하여 코드의 중복을 방지하고 확장성을 제공하며 구현된 동작을 가지고 있기 때문에 하위 클래스에서 재정의 하지않아도 될 경우 유용하다는 장점을 가지지만 다중상속이 불가능하고, 상속을 통해 밀접하게 결합된 클래스들을 형성하므로 유연성이 제한될 수 있다는 단점을 가지고 있어요.