C#

[C#] 인터페이스

키베이루 2023. 1. 3. 17:31

인터페이스

자식 클래스가 여러 부모 클래스를 상속받을 수 있다면 다양한 동작을 수행하는 장점을 가질 수 있다. 하지만 클래스를 통한 다중상속은 불가능하므로 인터페이스를 사용하면 다중상속이 가능하다.

인터페이스는 클래스 또는 구조체에 포함될 수 있는 관련 메서드들을 묶어 관리한다. 인터페이스는 명세서 역할을 하며 언터페이스를 상속받아 내용을 구현하는 클래스는 인터페이스의 선언된 멤버가 반드시 구현되어 있다는 보증을 한다.

이러한 인터페이스로 전체 프로그램의 설계도에 대한 명세서를 작성하여 뼈대를 잘 구성할 수 있다.

 - 인터페이스는 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 키워드를 사용할 수 없다.

 - 속성, 메서드, 이벤트와 대리자를 갖는다.