[C#] 인터페이스
인터페이스
자식 클래스가 여러 부모 클래스를 상속받을 수 있다면 다양한 동작을 수행하는 장점을 가질 수 있다. 하지만 클래스를 통한 다중상속은 불가능하므로 인터페이스를 사용하면 다중상속이 가능하다.
인터페이스는 클래스 또는 구조체에 포함될 수 있는 관련 메서드들을 묶어 관리한다. 인터페이스는 명세서 역할을 하며 언터페이스를 상속받아 내용을 구현하는 클래스는 인터페이스의 선언된 멤버가 반드시 구현되어 있다는 보증을 한다.
이러한 인터페이스로 전체 프로그램의 설계도에 대한 명세서를 작성하여 뼈대를 잘 구성할 수 있다.
- 인터페이스는 Interface 키워드를 사용하여 만든다. 인터페이스는 실행 가능한 코드와 데이터를
포함하고 있다.
- 추상 클래스처럼 다른 클래스에 멤버 이름을 미리 정의할 때 사용한다.
추상 클래스와 다른 점은 멤버 내용을 구현하지 않고 멤버이름만 정의한다.
- 인터페이스에는 메서드, 속성, 인덱서 및 이벤트를 정의할 수 있다.
- 현실 세계에서 전 세계 표준과 같은 기능이다.
- 단일 상속만 지원하는 클래스와 달리 인터페이스를 사용한 다중 상속이 가능하다.
- 인터페이스 멤버는 엑세스 한정자를 붙이지 않으며 항상 public이고, virtual 및 static 키워드를 붙일 수 없다.
- C#에서 인터페이스의 이름은 ICar, IFood, IComputer 형태로 대문자 I로 시작한다.
- 인터페이스는 인스턴스화 되지 않는다. 클래스를 사용해서 인스턴스화 한다.
- 인터페이스는 계약(Contract) 의미가 강하여 속성, 메서드, 이벤트, 인덱서 등 구조를 미리 정의한다.
인터페이스를 사용하여 다중상속 구현
다중 상속은 클래스 하나를 콤마로 구분해서 인터페이스 하나 이상을 상속하는 것을 의미한다.
C#에서는 클래스에 대한 단일 상속만 지원하는 대신 인터페이스에서 다중상속이 가능하다.
interface IAnimal
{
void Eat();
}
interface IDog
{
void Yelp();
}
class Animal : IAnimal, IDog
{
public void Eat()
{
Console.WriteLine("먹다.");
}
public void Yelp()
{
Console.WriteLine("짖다.");
}
}
static void Main(string[] args)
{
Animal animal = new Animal();
animal.Yelp();
animal.Eat();
}
/*
짖다
먹다
*/
인터페이스 vs 추상 클래스
추상클래스
- 구현된 코드가 들어온다. 즉, 메서드 시그니처만 있는 것이 아니라 사용가능한 실제로 구현된 메서드도 들어온다.
- 단일 상속 : 기본 클래스에서 상속될 수 있다.
- 각 멤버는 엑세스 한정자를 갖는다.
- 필드, 속성, 생성자, 소멸자, 메서드, 이벤트, 인덱서 등을 갖는다.
인터페이스
- 인터페이스는 규약이다
- 구현된 코드가 없다.
- 다중 상속 : 여러가지 인터페이스에서 상속 가능하다.
- 모든 멤버는 자동으로 public으로 virtual 및 static 키워드를 사용할 수 없다.
- 속성, 메서드, 이벤트와 대리자를 갖는다.