Interface 문(Visual Basic)
업데이트: 2007년 11월
인터페이스의 이름을 선언하고 인터페이스가 구성되는 멤버를 정의합니다.
[ <attributelist> ] [ accessmodifier ] [ Shadows ] _
Interface name [ ( Of typelist ) ]
[ Inherits interfacenames ]
[ [ modifiers ] Property membername ]
[ [ modifiers ] Function membername ]
[ [ modifiers ] Sub membername ]
[ [ modifiers ] Event membername ]
[ [ modifiers ] Interface membername ]
[ [ modifiers ] Class membername ]
[ [ modifiers ] Structure membername ]
End Interface
구성 요소
attributelist
선택적 요소입니다. 특성 목록을 참조하십시오.accessmodifier
선택적 요소이며 다음 중 하나일 수 있습니다.Visual Basic의 액세스 수준을 참조하십시오.
Shadows
선택적 요소입니다. Shadows를 참조하십시오.name
필수적 요소이며 이 인터페이스의 이름입니다. 선언 요소 이름을 참조하십시오.Of
선택적 요소이며 제네릭 인터페이스임을 지정합니다.typelist
Of 키워드를 사용하는 경우 필수적 요소입니다. 이 인터페이스에 대한 형식 매개 변수 목록입니다. 형식 목록을 참조하십시오.Inherits
선택적 요소입니다. 이 인터페이스가 다른 인터페이스의 특성과 멤버를 상속함을 나타냅니다. Inherits 문을 참조하십시오.interfacenames
Inherits 문을 사용하는 경우 필수적 요소입니다. 이 인터페이스가 파생되는 인터페이스의 이름입니다.modifiers
선택적 요소입니다. 정의할 인터페이스 멤버에 적합한 한정자입니다.Property
선택적 요소입니다. 인터페이스의 멤버인 속성을 정의합니다.Function
선택적 요소입니다. 인터페이스의 멤버인 Function 프로시저를 정의합니다.Sub
선택적 요소입니다. 인터페이스의 멤버인 Sub 프로시저를 정의합니다.Event
선택적 요소입니다. 인터페이스의 멤버인 이벤트를 정의합니다.Interface
선택적 요소입니다. 이 인터페이스에서 중첩되는 인터페이스를 정의합니다. 중첩 인터페이스 정의는 End Interface 문으로 끝나야 합니다.Class
선택적 요소입니다. 인터페이스의 멤버인 클래스를 정의합니다. 멤버 클래스 정의는 End Class 문으로 끝나야 합니다.Structure
선택적 요소입니다. 인터페이스의 멤버인 구조체를 정의합니다. 멤버 구조체 정의는 End Structure 문으로 끝나야 합니다.membername
인터페이스의 멤버로 정의된 각 속성, 프로시저, 이벤트, 인터페이스, 클래스 또는 구조체에 필수적 요소입니다. 멤버의 이름입니다.End Interface
Interface 정의를 끝냅니다.
설명
인터페이스는 클래스 및 구조체에서 구현할 수 있는 속성, 프로시저 등과 같은 멤버 집합을 정의합니다. 인터페이스는 멤버의 내부 작업이 아니라 멤버의 시그니처만 정의합니다.
클래스나 구조체는 인터페이스에 정의된 모든 멤버에 대해 코드를 제공하여 인터페이스를 구현합니다. 응용 프로그램에서 해당 클래스나 구조체로부터 인스턴스를 만들 경우 개체가 메모리에서 실행됩니다. 자세한 내용은 Visual Basic의 개체 지향 프로그래밍 및 Visual Basic의 인터페이스를 참조하십시오.
인터페이스와 클래스에 대한 비교 정보는 인터페이스 개요를 참조하십시오.
Interface는 네임스페이스 또는 모듈 수준에서만 사용할 수 있습니다. 즉, 인터페이스에 대한 선언 컨텍스트는 소스 파일, 네임스페이스, 클래스, 구조체, 모듈 또는 인터페이스이어야 하며 프로시저나 블록이 될 수 없습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하십시오.
인터페이스는 기본적으로 Friend(Visual Basic)에 대한 액세스를 허용합니다. 액세스 한정자를 사용하여 액세스 수준을 조정할 수 있습니다. 자세한 내용은 Visual Basic의 액세스 수준을 참조하십시오.
규칙
중첩 인터페이스. 인터페이스 내에서 다른 인터페이스를 정의할 수 있습니다. 외부 인터페이스를 포함 인터페이스, 내부 인터페이스를 중첩 인터페이스라고 합니다.
멤버 선언. 속성이나 프로시저를 인터페이스의 멤버로 선언하면 해당 속성이나 프로시저의 시그니처만 정의됩니다. 여기에는 요소 형식(속성 또는 프로시저), 매개 변수 및 매개 변수 형식, 반환 형식 등이 포함됩니다. 따라서 멤버 정의에서는 코드 줄이 한 줄만 사용되고 End Function 또는 End Property와 같은 종료 문은 인터페이스에 사용할 수 없습니다.
반대로 열거형이나 구조체 또는 중첩 클래스나 인터페이스를 정의하는 경우에는 해당 데이터 멤버가 포함되어야 합니다.
멤버 한정자. 모듈 멤버를 정의하는 경우에는 액세스 한정자를 사용할 수 없으며 Overloads를 제외한 프로시저 한정자나 Shared(Visual Basic)를 지정할 수도 없습니다. Shadows를 사용하여 모든 멤버를 선언할 수 있으며, 속성을 정의할 때 Default(Visual Basic)뿐 아니라 ReadOnly(Visual Basic) 또는 WriteOnly를 사용할 수도 있습니다.
상속. 인터페이스에서 Inherits 문을 사용하는 경우에는 하나 이상의 기본 인터페이스를 지정할 수 있습니다. 두 인터페이스가 동일한 이름을 가진 멤버를 정의하는 경우에도 해당 인터페이스로부터 상속할 수 있습니다. 이렇게 하려면 구현 코드에서는 이름 한정을 사용하여 구현할 멤버를 지정해야 합니다.
인터페이스는 보다 제한적인 액세스 수준을 가진 다른 인터페이스에서 상속할 수 없습니다. 예를 들어, Public 인터페이스는 Friend 인터페이스에서 상속할 수 없습니다.
인터페이스는 내부의 중첩 인터페이스에서 상속할 수 없습니다.
구현. 클래스에서 Implements(Visual Basic) 문을 사용하여 이 인터페이스를 구현하는 경우 인터페이스에 정의된 모든 멤버를 구현해야 합니다. 또한 구현 코드의 각 시그니처가 이 인터페이스에 정의된 해당 시그니처와 정확히 일치해야 합니다. 그러나 구현 코드의 멤버 이름은 인터페이스에 정의된 멤버 이름과 일치하지 않아도 됩니다.
클래스에서 프로시저를 구현하는 경우에는 프로시저를 Shared로 지정할 수 없습니다.
기본 속성. 인터페이스에서는 하나 이상의 속성을 기본 속성으로 지정할 수 있습니다. 기본 속성은 속성 이름을 사용하지 않고도 참조할 수 있습니다. 이러한 속성은 Default(Visual Basic) 한정자를 통해 선언하여 지정합니다. 자세한 내용은 기본 속성을 참조하십시오.
인터페이스는 상속 대상이 없는 경우에만 기본 속성을 정의할 수 있습니다.
동작
액세스 수준. 모든 인터페이스 멤버에는 암시적인 Public(Visual Basic) 액세스가 있습니다. 멤버를 정의할 때는 액세스 한정자를 사용할 수 없습니다. 그러나 인터페이스를 구현하는 클래스에서는 구현된 각 멤버에 대한 액세스 수준을 선언할 수 있습니다.
클래스 인스턴스를 변수에 할당하는 경우 해당 멤버의 액세스 수준은 변수의 데이터 형식이 기본 인터페이스인지 구현 클래스인지에 따라 달라질 수 있습니다. 다음은 이에 대한 예입니다.
Public Interface IDemo Sub doSomething() End Interface Public Class implementIDemo Implements IDemo Private Sub doSomething() Implements IDemo.doSomething End Sub End Class Dim varAsInterface As IDemo = New implementIDemo() Dim varAsClass As implementIDemo = New implementIDemo()
varAsInterface를 통해 클래스 멤버에 액세스하는 경우 해당 클래스 멤버는 모두 공용 액세스 권한을 가집니다. 그러나 varAsClass를 통해 멤버에 액세스하는 경우에는 Sub 프로시저 doSomething이 전용 액세스 권한을 가집니다.
범위. 인터페이스는 네임스페이스, 클래스, 구조체 또는 모듈 전체에서 범위 내에 포함됩니다.
모든 인터페이스 멤버의 범위는 전체 인터페이스입니다.
수명. 인터페이스 자체와 인터페이스 멤버는 수명을 갖지 않습니다. 클래스에서 인터페이스를 구현하고 개체가 해당 클래스의 인스턴스로 만들어지는 경우에는 개체가 실행되는 응용 프로그램 내에서 수명을 가집니다. 자세한 내용은 Class 문(Visual Basic)의 "수명"을 참조하십시오.
예제
다음 예제에서는 Interface 문을 사용하여 thisInterface 인터페이스를 정의합니다. 이 인터페이스는 Property 문 및 Function 문으로 구현되어야 합니다.
Public Interface thisInterface
Property thisProp(ByVal thisStr As String) As Char
Function thisFunc(ByVal thisInt As Integer) As Integer
End Interface
Property 및 Function 문은 인터페이스 내에서 End Property 및 End Function으로 끝나는 블록을 정의하지 않습니다. 인터페이스는 해당 멤버의 시그니처만 정의합니다. 전체 Property 및 Function 블록은 thisInterface를 구현하는 클래스에 표시됩니다.