개체 변수 선언(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 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
속성을 포함하지 않습니다. 반면, q
형식으로 선언된 Label는 Label 네임스페이스에 있는 System.Windows.Forms 클래스의 모든 메서드와 속성을 사용할 수 있습니다.
개체 변수의 유연성
상속 계층 구조에서 개체를 사용하는 경우 개체 변수를 선언하는 데 사용할 클래스를 선택할 수 있습니다. 이 옵션을 선택할 때는 클래스의 멤버에 대한 액세스와 개체 할당에 대한 유연성의 균형을 유지해야 합니다. 예를 들어 System.Windows.Forms.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
이 상속하는 모든 클래스의 모든 멤버도 사용할 수 있습니다.
다음 예제와 같이 개체 변수를 Form 형식으로 선언하여 더욱 일반적인 개체 변수를 만들 수 있습니다.
Dim anyForm As System.Windows.Forms.Form
앞선 예제의 선언을 통해 애플리케이션의 모든 양식을 anyForm
에 할당할 수 있습니다. 그러나 anyForm
은 클래스 Form의 모든 멤버에 액세스할 수 있지만 specialForm
과 같은 특정 양식에 대해 정의된 추가 메서드 또는 속성은 사용할 수 없습니다.
기본 클래스의 모든 멤버는 파생 클래스에서 사용할 수 있지만 파생 클래스의 추가 멤버는 기본 클래스에서 사용할 수 없습니다.
참고 항목
.NET