다음을 통해 공유


지역 형식 유추

업데이트: 2008년 7월

Visual Basic 2008의 컴파일러는 형식 유추를 사용하여 As 절 없이 선언된 지역 변수의 데이터 형식을 결정합니다. 컴파일러는 초기화 식의 형식에서 변수 형식을 유추합니다. 따라서 다음 예제와 같이 형식을 명시하지 않고 변수를 선언할 수 있습니다.

Public Sub inferenceExample()

    ' Using explicit typing.
    Dim num1 As Integer = 3

    ' Using local type inference.
    Dim num2 = 3

End Sub
참고:

지역 형식 유추는 클래스 필드를 선언하는 데 사용될 수 없습니다. 앞의 예제에서 num2가 지역 변수가 아니라 필드였다면 선언이 Option Strict on으로 오류를 발생시키고, num2를 Option Strict off인 Object로 분류합니다. 마찬가지로 Option Strict가 on일 때는 정적 변수의 형식을 유추할 수 없습니다. Option Strict off일 경우에는 Static staticVar = 5에서 staticVar의 형식이 Object입니다.

형식 유추를 사용하는 코드는 런타임에 바인딩을 사용하는 코드와 비슷합니다. 그러나 형식 유추는 변수를 Object로 두는 대신 강력한 형식으로 만듭니다. 컴파일러는 변수의 이니셜라이저를 사용하여 초기 바인딩 코드를 만들기 위한 변수의 형식을 컴파일 타임에 결정합니다. 앞의 예제에서 num2은 Integer의 형식으로 지정되었습니다.

초기 바인딩 변수의 동작은 런타임에만 형식을 알 수 있는 런타임에 바인딩된 변수의 동작과 다릅니다. 형식을 초기에 알면 컴파일러가 실행 이전에 문제를 식별하고, 메모리를 정확하게 할당하고, 기타 최적화를 수행할 수 있습니다. 초기 바인딩은 Visual Basic IDE(통합 개발 환경)에서 개체의 멤버에 대한 IntelliSense 도움말도 제공할 수 있도록 합니다. 또한 초기 바인딩은 성능 때문에 선호됩니다. 런타임에 바인딩된 변수에 저장된 모든 데이터는 Object 형식으로 래핑되어야 하고, 런타임에 이 형식의 멤버에 액세스하면 프로그램이 느려지기 때문입니다.

참고:

앞의 예제에서 num2를 Integer 형식으로 만들지 않으려면 Dim num3 As Object = 3 또는 Dim num4 As Double = 3 같은 선언을 사용하여 다른 형식을 지정하면 됩니다.

예제

형식 유추는 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

변수의 형식은 다음 예제와 같이 함수의 반환 값에서 유추될 수도 있습니다. 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에 대한 값을 지정하지 않으면 컴파일러 기본값이 Visual Basic 2008에서 만들어진 프로젝트에 대해서는 Option Infer On이고, 이전 버전에서 업그레이드된 버전에 대해서는 Option Infer Off입니다. 자세한 내용은 Option Infer 문/optioninfer를 참조하십시오.

참고:

파일에서 Option Infer에 대해 설정한 값이 IDE 또는 명령줄에 설정된 값과 충돌하는 경우 파일의 값이 우선 순위를 갖습니다.

제한

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

참고 항목

개념

익명 형식

초기 바인딩 및 런타임에 바인딩

Visual Basic의 LINQ 소개

참조

For Each...Next 문(Visual Basic)

For...Next 문(Visual Basic)

Option Infer 문

/optioninfer

변경 기록

날짜

변경 내용

이유

2008년 7월

"예제" 단원에 있는 텍스트의 루프 제어 변수 이름이 코드의 이름과 일치하도록 num에서 number로 변경되었습니다.

고객 의견