인터페이스(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 접근자가 있는 속성을 선언할 수 있습니다. 인터페이스를 구현하는 클래스는 get 및 set 접근자와 모두 동일한 속성을 선언할 수 있습니다. 그러나 속성이나 인덱서에 명시적 구현이 사용되는 경우에는 접근자가 일치해야 합니다. 명시적 구현에 대한 자세한 내용은 인터페이스 속성(C# 프로그래밍 가이드)을 참조하십시오.
인터페이스와 인터페이스 멤버는 추상으로서 기본 구현을 제공하지 않습니다. 자세한 내용은 추상 및 봉인 클래스와 클래스 멤버를 참조하십시오.
인터페이스는 다른 인터페이스를 상속할 수 있습니다. 클래스에서는 다른 인터페이스에서 상속된 인터페이스를 통해서나 상속하는 기본 클래스를 통해 인터페이스를 여러 차례 상속할 수 있습니다. 그러나 class ClassName : InterfaceName처럼 인터페이스가 클래스 정의의 일부로 선언되는 경우 클래스는 인터페이스를 한 번만 구현할 수 있습니다. 인터페이스를 구현하는 기본 클래스를 상속했으므로 인터페이스가 상속되면 기본 클래스에서 해당 구현이 제공됩니다. 또한 기본 클래스가 가상 멤버를 사용하여 인터페이스 멤버를 구현할 수 있습니다. 이 경우 파생된 클래스는 가상 구성원을 재정의하여 인터페이스 동작을 변경할 수 있습니다. 가상 멤버에 대한 자세한 내용은 Polymorphism을 참조하십시오.
인터페이스 개요
인터페이스에는 다음과 같은 속성이 있습니다.
인터페이스는 추상 기본 클래스와 비슷합니다. 인터페이스를 구현하는 모든 비추상 형식에서는 해당 멤버를 모두 구현해야 합니다.
인터페이스는 직접 인스턴스화할 수 없습니다.
인터페이스는 이벤트, 인덱서, 메서드 및 속성을 포함할 수 있습니다.
인터페이스는 메서드의 구현을 포함하지 않습니다.
클래스와 구조체는 여러 인터페이스를 구현할 수 있습니다.
인터페이스 자체는 여러 인터페이스에서 상속할 수 있습니다.
단원 내용
명시적 인터페이스 구현(C# 프로그래밍 가이드)
인터페이스에 적용되는 클래스 멤버를 만드는 방법에 대해 설명합니다.방법: 인터페이스 멤버를 명시적으로 구현(C# 프로그래밍 가이드)
인터페이스의 멤버를 명시적으로 구현하는 방법에 대한 예제를 제공합니다.방법: 두 인터페이스의 멤버를 명시적으로 구현(C# 프로그래밍 가이드)
상속을 통해 인터페이스의 멤버를 명시적으로 구현하는 방법에 대한 예제를 제공합니다.
관련 단원
인터페이스 속성(C# 프로그래밍 가이드)
인터페이스에 속성을 선언하는 방법에 대해 설명합니다.인터페이스의 인덱서(C# 프로그래밍 가이드)
인터페이스에 인덱서를 선언하는 방법에 대해 설명합니다.방법: 인터페이스 이벤트 구현(C# 프로그래밍 가이드)
인터페이스에서 이벤트를 선언하는 방법을 보여 줍니다.클래스 및 구조체(C# 프로그래밍 가이드)
C#에서 개체, 클래스 및 구조체의 사용 방법에 대해 설명합니다.상속(C# 프로그래밍 가이드)
C#에서 상속을 구현하는 방법에 대해 설명합니다.메서드(C# 프로그래밍 가이드)
C# 프로그래밍 모델에서 명명된 메서드에 대한 개념을 설명합니다.다형성(C# 프로그래밍 가이드)
C#에서 클래스가 둘 이상의 형식으로 사용되는 방법에 대해 설명합니다.추상 및 봉인 클래스와 클래스 멤버(C# 프로그래밍 가이드)
abstract 및 sealed 키워드가 상속에 영향을 주는 방법에 대해 설명합니다.속성(C# 프로그래밍 가이드)
C#의 속성 개념에 대해 설명합니다.이벤트(C# 프로그래밍 가이드)
C#의 이벤트 개념에 대해 설명합니다.인덱서(C# 프로그래밍 가이드)
C#의 인덱서 개념에 대해 설명합니다.
중요 설명서 장
Learning C# 3.0: Master the Fundamentals of C# 3.0의 Interfaces
참고 항목
참조
개념
변경 기록
날짜 |
변경 내용 |
이유 |
---|---|---|
2010년 7월 |
구현 및 상속 간에 구분합니다. 인터페이스에 포함되거나 포함될 수 없는 유형에 대해 명확히 설명했습니다. |
고객 의견 |