다음을 통해 공유


Interface 문(Visual Basic)

인터페이스의 이름을 선언하고 인터페이스가 구성하는 멤버의 정의를 소개합니다.

구문

[ <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 선택 사항. 다음 중 하나일 수 있습니다.

- 공용
- Protected
- Friend
- 프라이빗
- Protected Friend
- Private Protected

Access levels in Visual Basic을 참조하세요.
Shadows 선택 사항. Shadows를 참조하세요.
name 필수입니다. 이 인터페이스의 이름입니다. Declared Element Names을 참조하세요.
Of 선택 사항. 이것이 제네릭 인터페이스임을 지정합니다.
typelist Of 키워드를 사용하는 경우 필수입니다. 이 인터페이스의 형식 매개 변수 목록입니다. 선택적으로 각 형식 매개 변수는 InOut 제네릭 한정자를 사용하여 변형으로 선언될 수 있습니다. 형식 목록을 참조하세요.
Inherits 선택 사항. 이 인터페이스가 다른 인터페이스의 특성과 멤버를 상속함을 나타냅니다. Inherits 문을 참조하세요.
interfacenames Inherits 문을 사용하는 경우 필수입니다. 이 인터페이스가 파생되는 인터페이스의 이름입니다.
modifiers 선택 사항. 정의되는 인터페이스 멤버에 대한 적절한 한정자입니다.
Property 선택 사항. 인터페이스의 멤버인 속성을 정의합니다.
Function 선택 사항. 인터페이스의 멤버인 Function 프로시저를 정의합니다.
Sub 선택 사항. 인터페이스의 멤버인 Sub 프로시저를 정의합니다.
Event 선택 사항. 인터페이스의 멤버인 이벤트를 정의합니다.
Interface 선택 사항. 이 인터페이스 내에 중첩된 인터페이스를 정의합니다. 중첩된 인터페이스 정의는 End Interface 문으로 종료되어야 합니다.
Class 선택 사항. 인터페이스의 멤버인 클래스를 정의합니다. 멤버 클래스 정의는 End Class 문으로 종료되어야 합니다.
Structure 선택 사항. 인터페이스의 멤버인 구조체를 정의합니다. 멤버 구조체 정의는 End Structure 문으로 종료되어야 합니다.
membername 인터페이스의 멤버로 정의된 각 속성, 프로시저, 이벤트, 인터페이스, 클래스 또는 구조체에 필요합니다. 멤버의 이름입니다.
End Interface Interface 정의를 종료합니다.

설명

인터페이스는 클래스와 구조체가 구현할 수 있는 속성, 프로시저 등의 멤버 집합을 정의합니다. 인터페이스는 멤버의 서명만 정의하고 내부 작업은 정의하지 않습니다.

클래스 또는 구조체는 인터페이스에 정의된 모든 멤버에 대한 코드를 제공하여 인터페이스를 구현합니다. 마지막으로 애플리케이션이 해당 클래스나 구조체에서 인스턴스를 만들면 개체가 존재하고 메모리에서 실행됩니다. 자세한 내용은 개체 및 클래스인터페이스를 참조하세요.

네임스페이스 또는 모듈 수준에서만 Interface를 사용할 수 있습니다. 이는 인터페이스의 선언 컨텍스트가 원본 파일, 네임스페이스, 클래스, 구조체, 모듈 또는 인터페이스여야 하며 프로시저나 블록이 될 수 없음을 의미합니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하세요.

인터페이스는 기본적으로 Friend 액세스로 설정됩니다. 액세스 한정자를 사용하여 액세스 수준을 조정할 수 있습니다. 자세한 내용은 Visual Basic 액세스 수준을 참조하세요.

규칙

  • 중첩 인터페이스. 다른 인터페이스 내에 하나의 인터페이스를 정의할 수 있습니다. 외부 인터페이스를 포함 인터페이스라고 하고 내부 인터페이스를 중첩 인터페이스라고 합니다.

  • 멤버 선언. 속성이나 프로시저를 인터페이스의 멤버로 선언하면 해당 속성이나 프로시저의 서명만 정의하게 됩니다. 여기에는 요소 형식(속성 또는 프로시저), 해당 매개 변수 및 매개 변수 형식, 반환 형식이 포함됩니다. 이로 인해 멤버 정의는 한 코드 줄만 사용하며 End Function 또는 End Property와 같은 종료 문은 인터페이스에서 유효하지 않습니다.

    반대로 열거형이나 구조체, 중첩 클래스나 인터페이스를 정의할 때는 해당 데이터 멤버를 포함해야 합니다.

  • 멤버 한정자. 모듈 멤버를 정의할 때 액세스 한정자를 사용할 수 없으며 Shared 또는 Overloads를 제외한 모든 프로시저 한정자를 지정할 수 없습니다. Shadows를 사용하여 모든 멤버를 선언할 수 있으며, 속성을 정의할 때 ReadOnly 또는 WriteOnly뿐만 아니라 Default도 사용할 수 있습니다.

  • 상속. 인터페이스가 Inherits 문을 사용하는 경우 하나 이상의 기본 인터페이스를 지정할 수 있습니다. 두 인터페이스가 각각 동일한 이름을 가진 멤버를 정의하는 경우에도 두 인터페이스에서 상속할 수 있습니다. 그렇게 하는 경우 구현 코드는 이름 자격을 사용하여 구현 중인 멤버를 지정해야 합니다.

    인터페이스는 더 제한적인 액세스 수준을 가진 다른 인터페이스에서 상속할 수 없습니다. 예를 들어, Public 인터페이스는 Friend 인터페이스에서 상속할 수 없습니다.

    인터페이스는 내부에 중첩된 인터페이스에서 상속할 수 없습니다.

  • 구현 클래스가 Implements 문을 사용하여 이 인터페이스를 구현하는 경우 인터페이스 내에 정의된 모든 멤버를 구현해야 합니다. 또한 구현 코드의 각 서명은 이 인터페이스에 정의된 해당 서명과 정확히 일치해야 합니다. 그러나 구현 코드의 멤버 이름은 인터페이스에 정의된 멤버 이름과 일치할 필요가 없습니다.

    클래스가 프로시저를 구현하는 경우 해당 프로시저를 Shared로 지정할 수 없습니다.

  • 기본 속성. 인터페이스는 속성 이름을 사용하지 않고도 참조할 수 있는 기본 속성으로 최대 하나의 속성을 지정할 수 있습니다. 이러한 속성은 Default 한정자를 사용하여 선언하여 지정합니다.

    이는 인터페이스가 아무것도 상속하지 않는 경우에만 기본 속성을 정의할 수 있음을 의미합니다.

동작

  • 액세스 수준. 모든 인터페이스 멤버는 암시적으로 공용 액세스 권한을 갖습니다. 멤버를 정의할 때 액세스 한정자를 사용할 수 없습니다. 그러나 인터페이스를 구현하는 클래스는 구현된 각 멤버에 대한 액세스 수준을 선언할 수 있습니다.

    클래스 인스턴스를 변수에 할당하는 경우 해당 멤버의 액세스 수준은 변수의 데이터 형식이 기본 인터페이스인지 구현 클래스인지에 따라 달라질 수 있습니다. 다음 예제에서는 이것을 보여 줍니다.

    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 문의 "Lifetime"을 참조하세요.

예시

다음 예에서는 Interface 문을 사용하여 Property 문과 Function 문으로 구현되어야 하는 thisInterface라는 인터페이스를 정의합니다.

Public Interface thisInterface
    Property ThisProp(ByVal thisStr As String) As Char
    Function ThisFunc(ByVal thisInt As Integer) As Integer
End Interface

PropertyFunction 문은 인터페이스 내에서 End PropertyEnd Function으로 끝나는 블록을 도입하지 않습니다. 인터페이스는 해당 멤버의 서명만 정의합니다. 전체 PropertyFunction 블록은 thisInterface를 구현하는 클래스에 나타납니다.

참고 항목