지역 형식 유추(Visual Basic)
Visual Basic 컴파일러는 형식 유추를 사용하여 As
절 없이 선언된 지역 변수의 데이터 형식을 결정합니다. 컴파일러는 초기화 식의 형식에서 변수의 형식을 유추합니다. 이렇게 하면 다음 예제와 같이 형식을 명시적으로 지정하지 않고도 변수를 선언할 수 있습니다. 선언의 결과로 num1
및 num2
모두 정수로 강력하게 형식화됩니다.
Public Sub inferenceExample()
' Using explicit typing.
Dim num1 As Integer = 3
' Using local type inference.
Dim num2 = 3
End Sub
참고 항목
이전 예제에서 num2
를 Integer
로 형식화하지 않으려면 Dim num3 As Object = 3
또는 Dim num4 As Double = 3
과 같은 선언을 사용하여 다른 형식을 지정할 수 있습니다.
참고 항목
형식 유추는 비정적 지역 변수에만 사용할 수 있습니다. 클래스 필드, 속성 또는 함수의 형식을 결정하는 데 사용할 수 없습니다.
지역 형식 유추는 프로시저 수준에서 적용됩니다. 모듈 수준에서 변수를 선언하는 데 사용할 수 없습니다(클래스, 구조체, 모듈 또는 인터페이스 내에서는 사용할 수 있지만 프로시저 또는 블록 내에서는 사용할 수 없음). 이전 예제의 num2
가 프로시저의 지역 변수가 아닌 클래스 필드인 경우 선언은 Option Strict
을 켜는 오류를 일으키고 num2
는 Option Strict
를 끄는 Object
로 분류합니다. 마찬가지로 지역 형식 유추는 Static
으로 선언된 프로시저 수준 변수에는 적용되지 않습니다.
형식 유추 대 런타임에 바인딩
형식 유추를 사용하는 코드는 런타임에 바인딩을 사용하는 코드와 유사합니다. 그러나 형식 유추는 변수를 Object
로 두지 않고 변수를 강력하게 형식화합니다. 컴파일러는 변수의 이니셜라이저를 사용하여 컴파일 시간에 변수의 형식을 결정하여 초기 바인딩된 코드를 생성합니다. 이전 예제에서 num2
는 num1
과 같이 Integer
로 형식화됩니다.
초기 바인딩된 변수의 동작은 런타임에만 형식이 알려져 있는 런타임에 바인딩된 변수의 동작과 다릅니다. 형식을 초기에 알면 컴파일러가 실행 전에 문제를 식별하고, 메모리를 정확하게 할당하고, 다른 최적화를 수행할 수 있습니다. 또한 초기 바인딩을 사용하면 Visual Basic IDE(통합 개발 환경)에서 개체의 멤버에 대한 IntelliSense 도움말을 제공할 수 있습니다. 성능에도 초기 바인딩이 선호됩니다. 런타임에 바인딩된 변수에 저장된 모든 데이터는 Object
형식으로 래핑되어야 하고 런타임 시 해당 형식의 멤버에 액세스하면 프로그램 속도가 느려지기 때문입니다.
예제
형식 유추는 지역 변수가 As
절 없이 선언되고 초기화될 때 발생합니다. 컴파일러는 할당된 초기 값의 형식을 변수 형식으로 사용합니다. 예를 들어 다음의 각 코드 줄은 String
형식의 변수를 선언합니다.
' Using explicit typing.
Dim name1 As String = "Springfield"
' Using local type inference.
Dim name2 = "Springfield"
다음 코드는 정수 배열을 만드는 두 가지 동등한 방법을 보여 줍니다.
' Using explicit typing.
Dim someNumbers1() As Integer = New Integer() {4, 18, 11, 9, 8, 0, 5}
' Using local type inference.
Dim someNumbers2 = New Integer() {4, 18, 11, 9, 8, 0, 5}
형식 유추를 사용하여 루프 제어 변수의 형식을 결정하는 것이 편리합니다. 다음 코드에서 컴파일러는 이전 예제의 someNumbers2
가 정수 배열이기 때문에 number
가 Integer
라고 유추합니다.
Dim total = 0
For Each number In someNumbers2
total += number
Next
다음 예제에서 보여 주는 것과 같이 리소스 이름의 형식을 설정하기 위해 Using
문에서 로컬 형식 유추를 사용할 수 있습니다.
Using proc = New System.Diagnostics.Process
' Insert code to work with the resource.
End Using
다음 예제에서 볼 수 있듯이 함수의 반환 값에서 변수 형식을 유추할 수도 있습니다. Process.GetProcesses
가 프로세스 배열을 반환하기 때문에 pList1
과 pList2
는 모두 프로세스의 배열입니다.
' Using explicit typing.
Dim pList1() As Process = Process.GetProcesses()
' Using local type inference.
Dim pList2 = Process.GetProcesses()
Option Infer
Option Infer
를 사용하면 특정 파일에서 로컬 형식 유추가 허용되는지 여부를 지정할 수 있습니다. 옵션을 사용하거나 차단하려면 파일 시작 부분에 다음 문 중 하나를 입력합니다.
Option Infer On
Option Infer Off
코드에서 Option Infer
의 값을 지정하지 않으면 컴파일러 기본값은 Option Infer On
입니다.
파일에서 Option Infer
에 대해 설정된 값이 IDE 또는 명령줄에 설정된 값과 충돌하는 경우에는 파일의 값이 우선적으로 적용됩니다.
자세한 내용은 Option Infer 문 및 컴파일러 페이지, 프로젝트 디자이너(Visual Basic)를 참조하세요.
참고 항목
.NET