개체 변수 선언(Visual Basic)

일반 선언 문을 사용하여 개체 변수를 선언합니다. 데이터 형식의 경우 Object(개체 데이터 형식) 또는 개체를 만들려는 보다 구체적인 클래스를 지정합니다.

변수를 Object(으)로 선언하는 것은 이를 System.Object(으)로 선언하는 것과 동일합니다.

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

선언 구문

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

Dim variablename As [New] { objectclass | Object }  

선언에서 Public, Protected, Friend, Protected Friend, Private, 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 StrictOn으로 변환된 경우, 개체 변수는 선언된 클래스의 메서드와 속성에만 액세스할 수 있습니다. 다음 예제에서는 이것을 보여 줍니다.

' 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  

이 예제에서 pObject 클래스 자체의 멤버만 사용할 수 있으므로 Left 속성을 포함하지 않습니다. 반면, q 형식으로 선언된 LabelLabel 네임스페이스에 있는 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  

앞선 예제의 선언은 변수 nextFormspecialForm 클래스의 개체로 제한하지만, 이로 인해 specialForm의 모든 메서드와 속성을 nextForm에 사용할 수 있으며, specialForm이 상속하는 모든 클래스의 모든 멤버도 사용할 수 있습니다.

다음 예제와 같이 개체 변수를 Form 형식으로 선언하여 더욱 일반적인 개체 변수를 만들 수 있습니다.

Dim anyForm As System.Windows.Forms.Form  

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

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

참고 항목