다음을 통해 공유


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

업데이트: 2010년 7월

인터페이스는 임의의 class 또는 struct에 속할 수 있는 관련 기능의 그룹을 설명합니다. 다음 예제에서와 같이 인터페이스 키워드를 사용하여 인터페이스를 정의합니다.

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

인터페이스는 메서드, 속성, 이벤트, 인덱서 또는 이러한 네 가지 멤버 형식의 조합으로 구성됩니다. 인터페이스는 상수, 필드, 연산자, 인스턴스 생성자, 소멸자 또는 형식을 포함할 수 없습니다. 고정 멤버를 포함할 수 없습니다. 인터페이스 멤버는 자동으로 공개되며 액세스 한정자를 포함할 수 없습니다.

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

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

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

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

    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;
        }
    }
    

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

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

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

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

인터페이스 개요

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

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

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

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

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

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

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

단원 내용

관련 단원

중요 설명서 장

Learning C# 3.0: Master the Fundamentals of C# 3.0Interfaces

참고 항목

참조

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

개념

C# 프로그래밍 가이드

변경 기록

날짜

변경 내용

이유

2010년 7월

구현 및 상속 간에 구분합니다. 인터페이스에 포함되거나 포함될 수 없는 유형에 대해 명확히 설명했습니다.

고객 의견