다음을 통해 공유


인터페이스(C# 프로그래밍 가이드)

업데이트: 2007년 11월

다음 예제에서와 같이 인터페이스는 인터페이스 키워드를 사용하여 정의합니다.

interface IEquatable<T>
{
    bool Equals(T obj);
}

인터페이스는 임의의 class 또는 struct에 속할 수 있는 관련 기능의 그룹을 설명합니다. 인터페이스는 메서드, 속성, 이벤트, 인덱서 또는 이러한 네 가지 멤버 형식의 조합으로 구성될 수 있습니다. 인터페이스에는 필드가 포함될 수 없습니다. 인터페이스 멤버는 공용으로 자동 설정됩니다.

클래스 또는 구조체가 인터페이스를 상속하는 경우 이 클래스 또는 구조체는 인터페이스에서 정의하는 모든 멤버에 대한 구현을 제공해야 합니다. 인터페이스 자체는 클래스 또는 구조체에서 기본 클래스 기능을 상속하는 것처럼 상속할 수 있는 기능을 제공하지 않습니다. 하지만 기본 클래스가 인터페이스를 구현하는 경우 파생 클래스는 해당 구현을 상속하게 됩니다.

클래스 및 구조체는 기본 클래스나 구조체를 상속하는 것과 비슷한 방식으로 인터페이스에서 상속할 수 있지만 여기에는 두 가지 차이점이 있습니다.

  • 클래스나 구조체는 여러 인터페이스를 상속할 수 있습니다.

  • 클래스나 구조체가 인터페이스를 상속할 경우 인터페이스 자체에는 구현이 포함되지 않으므로 메서드 이름과 시그니처만 상속됩니다. 예를 들면 다음과 같습니다.

    public class Car : IEquatable<Car>
    {
        public string Make {get; set;}
        public string Model { get; set; }
        public string Year { get; set; }
    
        // Implementation of IEquatable<T> interface
        public bool Equals(Car car)
        {
            if (this.Make == car.Make &&
                this.Model == car.Model &&
                this.Year == car.Year)
            {
                return true;
            }
            else
                return false;
        }
    }
    

인터페이스 멤버를 구현하려면 클래스의 상응하는 멤버가 정적이 아닌 공용 멤버여야 하고 인터페이스 멤버와 동일한 이름 및 시그니처를 사용해야 합니다. 클래스의 인덱서와 속성에서는 인터페이스에 정의된 인덱서나 속성에 대한 추가 접근자를 정의할 수 있습니다. 예를 들어, 인터페이스에서 get 접근자로 속성을 선언할 수 있지만, 이 인터페이스를 구현하는 클래스에서는 get 및 set 접근자를 모두 사용하여 동일한 속성을 선언할 수 있습니다. 그러나 속성이나 인덱서에 명시적 구현이 사용되는 경우에는 접근자가 일치해야 합니다.

인터페이스와 인터페이스 멤버는 추상으로서 기본 구현을 제공하지 않습니다. 자세한 내용은 추상 및 봉인 클래스와 클래스 멤버를 참조하십시오.

IEquatable<T> 인터페이스는 개체를 동일한 형식의 다른 개체와 같은지 결정할 수 있다는 사실을 개체 사용자에게 알립니다. 인터페이스 사용자는 비교를 구현하는 방법을 알 필요가 없습니다.

인터페이스는 다른 인터페이스를 상속할 수 있습니다. 클래스에서는 클래스가 상속하는 기본 클래스나 인터페이스를 통해 인터페이스 하나를 여러 차례 상속할 수 있습니다. 이러한 경우 인터페이스가 새 클래스의 일부로 선언되는 경우 클래스는 인터페이스를 한 번만 구현할 수 있습니다. 상속된 인터페이스가 새 클래스의 일부로 선언되어 있지 않으면 이를 선언한 기본 클래스에서 해당 구현이 제공됩니다. 기본 클래스에서 가상 멤버를 사용하여 인터페이스 멤버를 구현할 수 있습니다. 이 경우 인터페이스를 상속하는 클래스는 가상 멤버를 재정의하여 인터페이스 동작을 변경할 수 있습니다. 가상 멤버에 대한 자세한 내용은 Polymorphism을 참조하십시오.

인터페이스 개요

인터페이스에는 다음과 같은 속성이 있습니다.

  • 인터페이스는 추상 기본 클래스와 비슷합니다. 인터페이스를 상속하는 모든 비추상 형식에서는 해당 멤버를 모두 구현해야 합니다.

  • 인터페이스는 직접 인스턴스화할 수 없습니다.

  • 인터페이스는 이벤트, 인덱서, 메서드 및 속성을 포함할 수 있습니다.

  • 인터페이스는 메서드의 구현을 포함하지 않습니다.

  • 클래스와 구조체는 여러 인터페이스에서 상속할 수 있습니다.

  • 인터페이스 자체는 여러 인터페이스에서 상속할 수 있습니다.

단원 내용

관련 단원

참고 항목

개념

C# 프로그래밍 가이드

참조

상속(C# 프로그래밍 가이드)