Share via


인터페이스(Visual Basic)

인터페이스는 클래스에서 구현할 수 있는 속성, 메서드 및 이벤트를 정의합니다. 인터페이스를 사용하면 여러 기능을 서로 밀접하게 관련된 속성, 메서드 및 이벤트의 작은 그룹으로 정의할 수 있습니다. 이렇게 하면 기존 코드를 손상시키지 않고도 인터페이스의 확장 구현을 개발할 수 있으므로 호환성 문제가 줄어듭니다. 또한 언제든지 추가적인 인터페이스와 구현을 개발하여 새 기능을 추가할 수 있습니다.

클래스를 상속하는 대신 인터페이스를 사용하는 데에는 다음과 같은 추가적인 이유가 있습니다.

  • 응용 프로그램에서 특정 기능을 제공하기 위해 서로 관련되지 않은 여러 가지 개체 형식을 필요로 하는 경우에는 인터페이스를 사용하는 것이 적합합니다.

  • 인터페이스의 경우에는 한 번만 구현을 정의하여도 여러 개의 인터페이스가 구현되므로 기본 클래스보다 좀 더 융통성이 있습니다.

  • 기본 클래스에서 구현을 상속해야 할 필요가 없는 경우에는 인터페이스를 사용하는 것이 적합합니다.

  • 인터페이스는 클래스를 상속할 수 없는 경우에 유용합니다. 예를 들어, 구조체는 클래스에서 상속될 수 없지만 인터페이스를 구현할 수는 있습니다.

인터페이스 선언

인터페이스 정의는 Interface 문과 End Interface 문 내에 포함됩니다. Interface 문 다음에는 하나 이상의 상속된 인터페이스를 나열하는 선택적 Inherits 문을 추가할 수 있습니다. Inherits 문은 주석을 제외하고 선언에 포함된 모든 문의 앞에 와야 합니다. 인터페이스 정의의 나머지 문은 Event, Sub, Function, Property, Interface, Class, Structure 및 Enum 문이어야 합니다. 인터페이스에는 구현 코드나 구현 코드와 관련된 문(예: End Sub, End Property)은 포함될 수 없습니다.

네임스페이스에서 interface 문은 기본적으로 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 등의 다른 한정자는 사용할 수 없습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준(Visual Basic)을 참조하십시오.

예를 들어, 다음 코드에서는 함수, 속성 및 이벤트가 하나씩 있는 인터페이스를 정의합니다.

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 키워드

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

마지막 예제에서는 Interface1에서 상속된 메서드를 포함하여 Interface2를 구현합니다.

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

관련 항목

제목

설명

연습: 인터페이스 만들기 및 구현(Visual Basic)

사용자가 직접 인터페이스를 정의하고 구현하는 프로세스에 대해 자세하게 설명합니다.

제네릭 인터페이스의 가변성(C# 및 Visual Basic)

제네릭 인터페이스의 공 분산 및 반공변성(Contravariance)에 대해 설명하고 .NET Framework의 variant 제네릭 인터페이스 목록을 제공합니다.