인터페이스는 클래스가 구현할 수 있는 속성, 메서드 및 이벤트를 정의합니다. 인터페이스를 사용하면 기능을 밀접하게 관련된 속성, 메서드 및 이벤트의 작은 그룹으로 정의할 수 있습니다. 이렇게 하면 기존 코드를 위태롭게 하지 않고 인터페이스에 대한 향상된 구현을 개발할 수 있으므로 호환성 문제가 줄어듭니다. 추가 인터페이스 및 구현을 개발하여 언제든지 새 기능을 추가할 수 있습니다.
클래스 상속 대신 인터페이스를 사용할 수 있는 몇 가지 다른 이유가 있습니다.
인터페이스는 특정 기능을 제공하기 위해 애플리케이션에 관련 없는 개체 형식이 많이 필요한 상황에 더 적합합니다.
인터페이스는 여러 인터페이스를 구현할 수 있는 단일 구현을 정의할 수 있으므로 기본 클래스보다 더 유연합니다.
인터페이스는 기본 클래스에서 구현을 상속할 필요가 없는 경우에 더 좋습니다.
인터페이스는 클래스 상속을 사용할 수 없는 경우에 유용합니다. 예를 들어 구조체는 클래스에서 상속할 수 없지만 인터페이스를 구현할 수 있습니다.
인터페이스 선언
인터페이스 정의는 Interface
와 End Interface
문 사이에 포함됩니다.
Interface
문 다음에, 하나 이상의 상속된 인터페이스를 나열하는 선택적 Inherits
문을 추가할 수 있습니다.
Inherits
문장은 주석을 제외한 선언의 다른 모든 문장 앞에 있어야 합니다. 인터페이스 정의의 나머지 문은 Event
, Sub
, Function
, Property
, Interface
, Class
, Structure
및 Enum
문이어야 합니다. 인터페이스에는 구현 코드와 관련된 구현 코드 또는 문(예: End Sub
또는 End Property
.)을 포함할 수 없습니다.
네임스페이스에서 인터페이스 문은 기본적으로 Friend
이지만, 명시적으로 Public
또는 Friend
로 선언할 수도 있습니다. 클래스, 모듈, 인터페이스 및 구조체 내에 정의된 인터페이스는 기본적으로 Public
이지만, 명시적으로 Public
, Friend
, Protected
, 또는 Private
로 선언할 수도 있습니다.
비고
키워드는 Shadows
모든 인터페이스 멤버에 적용할 수 있습니다.
Overloads
키워드는 인터페이스 정의에서 선언된 Sub
, Function
, 및 Property
구문에 적용될 수 있습니다. 또한 Property
문에는 Default
, ReadOnly
, 또는 WriteOnly
한정자가 있을 수 있습니다. 다른 한정자(Public
, , , Private
Friend
, Protected
, Shared
Overrides
MustOverride
또는 Overridable
)는 허용되지 않습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하세요.
예를 들어 다음 코드는 하나의 함수, 하나의 속성 및 하나의 이벤트를 사용하여 인터페이스를 정의합니다.
Interface IAsset
Event ComittedChange(ByVal Success As Boolean)
Property Division() As String
Function GetID() As Integer
End Interface
인터페이스 구현
Visual Basic 예약 단어 Implements
는 두 가지 방법으로 사용됩니다. 이 문은 Implements
클래스 또는 구조체가 인터페이스를 구현한다는 것을 의미합니다. 키워드는 Implements
클래스 멤버 또는 구조체 멤버가 특정 인터페이스 멤버를 구현한다는 것을 의미합니다.
구현문
클래스 또는 구조체가 하나 이상의 인터페이스를 구현하는 경우, Implements
또는 Class
문 바로 뒤에 Structure
문이 포함되어야 합니다. 이 Implements
문을 사용하려면 클래스에서 쉼표로 구분된 인터페이스 목록을 구현해야 합니다. 클래스 또는 구조체는 키워드를 사용하여 모든 인터페이스 멤버를 Implements
구현해야 합니다.
키워드 구현
키 Implements
워드를 사용하려면 쉼표로 구분된 인터페이스 멤버 목록을 구현해야 합니다. 일반적으로 단일 인터페이스 멤버만 지정되지만 여러 멤버를 지정할 수 있습니다. 인터페이스 멤버의 사양은 클래스 내의 implements 문에 지정해야 하는 인터페이스 이름, 마침표, 그리고 구현할 멤버 함수, 속성 또는 이벤트의 이름으로 구성됩니다. 인터페이스 멤버를 구현하는 멤버의 이름은 모든 법적 식별자를 사용할 수 있으며 이전 버전의 Visual Basic에서 사용된 규칙으로 InterfaceName_MethodName
제한되지 않습니다.
예를 들어 다음 코드는 인터페이스의 메서드를 구현하는 명명된 Sub1
서브루틴을 선언하는 방법을 보여 줍니다.
Class Class1
Implements interfaceclass.interface2
Sub Sub1(ByVal i As Integer) Implements interfaceclass.interface2.Sub1
End Sub
End Class
구현 멤버의 매개 변수 형식 및 반환 형식은 인터페이스의 인터페이스 속성 또는 멤버 선언과 일치해야 합니다. 인터페이스의 요소를 구현하는 가장 일반적인 방법은 이전 예제와 같이 인터페이스와 이름이 같은 멤버를 사용하는 것입니다.
인터페이스 메서드의 구현을 선언하려면 인스턴스 메서드 선언에 유효한 모든 특성을 사용할 수 있으며, 여기에는 Overloads
, Overrides
, Overridable
, Public
, Private
, Protected
, Friend
, Protected Friend
, MustOverride
, Default
, 및 Static
등이 포함됩니다.
Shared
이 특성은 인스턴스 메서드가 아닌 클래스를 정의하기 때문에 유효하지 않습니다.
Implements
다음 예제와 같이 인터페이스에 정의된 여러 메서드를 구현하는 단일 메서드를 작성할 수도 있습니다.
Class Class2
Implements I1, I2
Protected Sub M1() Implements I1.M1, I1.M2, I2.M3, I2.M4
End Sub
End Class
프라이빗 멤버를 사용하여 인터페이스 멤버를 구현할 수 있습니다. 프라이빗 멤버가 인터페이스의 멤버를 구현하는 경우 클래스의 개체 변수에서 직접 사용할 수 없더라도 해당 멤버는 인터페이스를 통해 사용할 수 있게 됩니다.
인터페이스 구현 예제
인터페이스를 구현하는 클래스는 모든 속성, 메서드 및 이벤트를 구현해야 합니다.
다음 예제에서는 두 인터페이스를 정의합니다. 두 번째 인터페이스 Interface2
는 Interface1
를 상속하고, 추가 속성과 메서드를 정의합니다.
Interface Interface1
Sub sub1(ByVal i As Integer)
End Interface
' Demonstrates interface inheritance.
Interface Interface2
Inherits Interface1
Sub M1(ByVal y As Integer)
ReadOnly Property Num() As Integer
End Interface
다음 예제에서는 이전 예제에 정의된 인터페이스를 구현합니다 Interface1
.
Public Class ImplementationClass1
Implements Interface1
Sub Sub1(ByVal i As Integer) Implements Interface1.sub1
' Insert code here to implement this method.
End Sub
End Class
마지막 예제는 Interface2
을 구현하며, Interface1
에서 상속된 메서드를 포함합니다.
Public Class ImplementationClass2
Implements Interface2
Dim INum As Integer = 0
Sub sub1(ByVal i As Integer) Implements Interface2.sub1
' Insert code here that implements this method.
End Sub
Sub M1(ByVal x As Integer) Implements Interface2.M1
' Insert code here to implement this method.
End Sub
ReadOnly Property Num() As Integer Implements Interface2.Num
Get
Num = INum
End Get
End Property
End Class
readwrite 속성을 사용하여 읽기 전용 속성을 구현할 수 있습니다(즉, 구현 클래스에서 읽기 전용으로 선언할 필요가 없음). 인터페이스를 구현하면 적어도 인터페이스에서 선언하는 멤버를 구현할 수 있지만 속성을 쓰기 가능하도록 허용하는 등 더 많은 기능을 제공할 수 있습니다.
관련 항목
제목 | 설명 |
---|---|
연습: 인터페이스 만들기 및 구현 | 사용자 고유의 인터페이스를 정의하고 구현하는 프로세스를 안내하는 자세한 절차를 제공합니다. |
제네릭 인터페이스의 분산 | 제네릭 인터페이스의 공변성 및 반공변에 대해 설명하고 .NET Framework의 변형 제네릭 인터페이스 목록을 제공합니다. |
.NET