지역 형식 유추(Visual Basic)

Visual Basic 컴파일러는 형식 유추를 사용하여 As 절 없이 선언된 지역 변수의 데이터 형식을 결정합니다. 컴파일러는 초기화 식의 형식에서 변수의 형식을 유추합니다. 이렇게 하면 다음 예제와 같이 형식을 명시적으로 지정하지 않고도 변수를 선언할 수 있습니다. 선언의 결과로 num1num2 모두 정수로 강력하게 형식화됩니다.

Public Sub inferenceExample()

    ' Using explicit typing.
    Dim num1 As Integer = 3

    ' Using local type inference.
    Dim num2 = 3

End Sub

참고 항목

이전 예제에서 num2Integer로 형식화하지 않으려면 Dim num3 As Object = 3 또는 Dim num4 As Double = 3과 같은 선언을 사용하여 다른 형식을 지정할 수 있습니다.

참고 항목

형식 유추는 비정적 지역 변수에만 사용할 수 있습니다. 클래스 필드, 속성 또는 함수의 형식을 결정하는 데 사용할 수 없습니다.

지역 형식 유추는 프로시저 수준에서 적용됩니다. 모듈 수준에서 변수를 선언하는 데 사용할 수 없습니다(클래스, 구조체, 모듈 또는 인터페이스 내에서는 사용할 수 있지만 프로시저 또는 블록 내에서는 사용할 수 없음). 이전 예제의 num2가 프로시저의 지역 변수가 아닌 클래스 필드인 경우 선언은 Option Strict을 켜는 오류를 일으키고 num2Option Strict를 끄는 Object로 분류합니다. 마찬가지로 지역 형식 유추는 Static으로 선언된 프로시저 수준 변수에는 적용되지 않습니다.

형식 유추 대 런타임에 바인딩

형식 유추를 사용하는 코드는 런타임에 바인딩을 사용하는 코드와 유사합니다. 그러나 형식 유추는 변수를 Object로 두지 않고 변수를 강력하게 형식화합니다. 컴파일러는 변수의 이니셜라이저를 사용하여 컴파일 시간에 변수의 형식을 결정하여 초기 바인딩된 코드를 생성합니다. 이전 예제에서 num2num1과 같이 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가 정수 배열이기 때문에 numberInteger라고 유추합니다.

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가 프로세스 배열을 반환하기 때문에 pList1pList2는 모두 프로세스의 배열입니다.

' 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)를 참조하세요.

참고 항목