다음을 통해 공유


업그레이드 권장 사항: 초기 바인딩 및 명시적 변환 사용

업데이트: 2007년 11월

Visual Basic 6.0과 Visual Basic 2008은 모두 Object 데이터 형식으로 변수를 선언하고 런타임에 이 변수를 클래스의 인스턴스에 할당하는 방식인 런타임에 바인딩된 개체 사용을 지원합니다. 그러나 업그레이드 프로세스 중에 런타임에 바인딩되는 개체는 기본 속성을 확인하거나, 내부 개체 모델이 변경되어 속성, 메서드 및 이벤트를 변환할 필요가 있는 경우에 문제가 발생할 수 있습니다. 예를 들어, Label1이라는 레이블을 가진 Form1이라는 폼이 있다고 가정합니다. 다음 Visual Basic 6.0 코드는 해당 레이블의 캡션을 "SomeText"로 설정합니다.

Dim o As Object
Set o = Me.Label1
o.Caption = "SomeText"

Visual Basic 2008에서 레이블 컨트롤의 Caption 속성은 Text 속성으로 대체됩니다. 코드를 업그레이드하면 Caption 속성의 모든 인스턴스가 Text로 변경되지만 런타임에 바인딩된 개체는 형식이 없으므로 Visual Basic에서 개체의 형식 또는 변경해야 하는 속성을 확인할 수 없습니다. 이러한 경우에는 업그레이드한 후 코드를 직접 변경해야 합니다.

초기 바인딩 개체를 사용하여 코드를 다시 작성하는 경우 다음과 같이 자동으로 업그레이드됩니다.

Dim o As Label
Set o = Me.Label1
o.Text = "SomeText"

변수를 선언할 때 가능하면 Object 데이터 형식보다 적절한 개체 형식으로 선언하는 것이 좋습니다.

Visual Basic 6.0 코드에서 Object 변수 및 Variant 변수를 사용할 경우 변수를 할당하거나, 변수에서 연산을 수행하거나, 변수를 함수에 전달하는 데 명시적 변환을 사용하는 것이 좋습니다. 예를 들어, 다음 코드에서는 '+' 연산의 의도가 불분명합니다.

Dim Var1 As Variant
Dim Var2 As Variant
Dim Var3 As Variant
Var1 = "3"
Var2 = 4
'BAD: Should Var1 and Var2 be added as strings or integers?
Var3 = Var1 + Var2

위의 예제는 Visual Basic 2008에서 런타임 오류를 발생시킬 수도 있습니다. 다음과 같이 명시적 변환을 사용하도록 마지막 줄의 코드를 다시 작성하면 코드가 제대로 실행됩니다.

'GOOD: explicit conversion
Var3 = CInt(Var1) + CInt(Var2)

Visual Basic 2008에서는 매개 변수 형식을 기반으로 하는 함수 오버로드를 지원합니다. 예를 들어, Environ 함수는 현재 다음과 같은 두 가지 형식를 가지고 있습니다.

Environ( Expression As Integer) As String
Environ( Expression As String ) As String

Visual Basic 2008에서는 매개 변수 형식을 기반으로 호출할 함수를 결정합니다. 정수를 Environ()에 전달하면 정수 버전이, 문자열을 전달하면 문자열 버전이 호출됩니다. 오버로드된 함수에 Variant 또는 Object 데이터 형식을 전달하는 코드는 컴파일 오류나 런타임 오류를 발생시킬 수 있습니다. 다음 예제처럼 명시적 변환을 사용하면 코드를 Visual Basic 2008로 업그레이드한 후에도 코드가 의도한 대로 실행됩니다.

Dim a As String
Dim v As Variant
v = "Path"
'GOOD: explicit conversion
a = Environ(CStr(v))

런타임에 바인딩되는 개체에 명시적 변환을 사용하는 것은 바람직한 코드 작성 습관입니다. 이렇게 하면 코드의 용도가 쉽게 확인되어 프로젝트를 Visual Basic 2008로 쉽게 업그레이드할 수 있습니다.

참고 항목

기타 리소스

업그레이드를 위한 언어 권장 사항