다음을 통해 공유


개체 변수 선언(Visual Basic)

일반 선언 문을 사용하여 개체 변수를 선언합니다. 데이터 형식으로는 Object (즉, 개체 데이터 형식) 또는 개체를 생성할 보다 구체적인 클래스를 지정합니다.

변수를 다음과 같이 Object 선언하는 것은 변수를 선언하는 것과 동일합니다 System.Object.

특정 개체 클래스를 사용하여 변수를 선언하면 해당 클래스에서 노출하는 모든 메서드와 속성 및 상속되는 클래스에 액세스할 수 있습니다. 변수를 Object로 선언할 경우, Object를 설정하여 늦은 바인딩을 허용하지 않는 한 Option Strict Off 클래스의 멤버에만 액세스할 수 있습니다.

선언 구문

다음 구문을 사용하여 개체 변수를 선언합니다.

Dim variablename As [New] { objectclass | Object }  

선언에서 Public, Protected, Friend, , Protected FriendPrivate, Shared 또는 Static을 지정할 수도 있습니다. 다음 예제 선언은 유효합니다.

Private objA As Object  
Static objB As System.Windows.Forms.Label  
Dim objC As System.OperatingSystem  

지연 바인딩 및 초기 바인딩

코드가 실행될 때까지 특정 클래스를 알 수 없는 경우도 있습니다. 이 경우 데이터 형식으로 개체 변수를 Object 선언해야 합니다. 이렇게 하면 모든 형식의 개체에 대한 일반 참조가 생성되고 런타임에 특정 클래스가 할당됩니다. 이를 지연 바인딩이라고합니다. 지연 바인딩에는 추가 실행 시간이 필요합니다. 또한 코드를 가장 최근에 할당한 클래스의 메서드 및 속성으로 제한합니다. 코드에서 다른 클래스의 멤버에 액세스하려고 하면 런타임 오류가 발생할 수 있습니다.

컴파일 시간에 특정 클래스를 알고 있는 경우 개체 변수를 해당 클래스로 선언해야 합니다. 이를 초기 바인딩이라고합니다. 초기 바인딩은 성능을 향상시키고 특정 클래스의 모든 메서드 및 속성에 대한 코드 액세스를 보장합니다. 앞의 예제 선언에서 변수 objA 가 클래스 System.Windows.Forms.Label의 개체만 사용하는 경우 해당 선언에 지정 As System.Windows.Forms.Label 해야 합니다.

초기 바인딩의 장점

개체 변수를 특정 클래스로 선언하면 다음과 같은 몇 가지 이점이 있습니다.

  • 자동 형식 검사

  • 특정 클래스의 모든 멤버에 대한 액세스 보장

  • 코드 편집기에서 Microsoft IntelliSense 지원

  • 코드의 가독성 향상

  • 코드에서 오류 감소

  • 런타임이 아닌 컴파일 시간에 적발된 오류

  • 더 빠른 코드 실행

개체 변수 멤버에 대한 액세스

Option Strict 설정On되면 개체 변수는 선언하는 클래스의 메서드 및 속성에만 액세스할 수 있습니다. 다음 예제에서는 이를 보여 줍니다.

' Option statements must precede all other source file lines.  
Option Strict On  
' Imports statement must precede all declarations in the source file.  
Imports System.Windows.Forms  
Public Sub accessMembers()  
    Dim p As Object  
    Dim q As System.Windows.Forms.Label  
    p = New System.Windows.Forms.Label  
    q = New System.Windows.Forms.Label  
    Dim j, k As Integer  
    ' The following statement generates a compiler ERROR.  
    j = p.Left  
    ' The following statement retrieves the left edge of the label in pixels.  
    k = q.Left  
End Sub  

이 예제 p 에서는 속성을 포함하지 Object 않는 클래스 자체의 Left 멤버만 사용할 수 있습니다. 반면 qLabel 유형으로 선언되었으므로 Label 네임스페이스의 System.Windows.Forms 클래스에 있는 모든 메서드와 속성을 사용할 수 있습니다.

개체 변수의 유연성

상속 계층 구조에서 개체를 사용하는 경우 개체 변수를 선언하는 데 사용할 클래스를 선택할 수 있습니다. 이 옵션을 선택할 때는 클래스의 멤버에 대한 액세스와 개체 할당의 유연성의 균형을 유지해야 합니다. 예를 들어 클래스로 이어지는 상속 계층 구조를 고려합니다 System.Windows.Forms.Form .

Object

  MarshalByRefObject

    Component

      Control

        ScrollableControl

          ContainerControl

            Form

애플리케이션이 클래스specialForm에서 상속되는 양식 클래스를 Form정의한다고 가정합니다. 구체적으로 specialForm을(를) 참조하는 개체 변수를 선언할 수 있습니다. 예시는 다음과 같습니다.

Public Class specialForm  
    Inherits System.Windows.Forms.Form  
    ' Insert code defining methods and properties of specialForm.  
End Class  
Dim nextForm As New specialForm  

앞의 예제에서 선언은 변수 nextForm를 클래스 specialForm의 객체로 제한합니다. 그러나 이 선언은 specialForm의 모든 메서드와 속성을 nextForm에서 사용할 수 있도록 하고, 또한 specialForm가 상속하는 모든 클래스의 모든 멤버도 nextForm에서 사용할 수 있도록 합니다.

다음 예제에서처럼 Form 형식으로 선언하여 개체 변수를 보다 일반적으로 만들 수 있습니다.

Dim anyForm As System.Windows.Forms.Form  

앞의 예제에서의 선언을 통해 애플리케이션의 어떤 폼이든 anyForm에 할당할 수 있습니다. 그러나 클래스anyForm의 모든 멤버에 액세스할 수 있지만 Form 특정 양식specialForm에 대해 정의된 추가 메서드 또는 속성은 사용할 수 없습니다.

기본 클래스의 모든 멤버는 파생 클래스에서 사용할 수 있지만 파생 클래스의 추가 멤버는 기본 클래스에서 사용할 수 없습니다.

참고하십시오