다음을 통해 공유


Option Strict 문

암시적 데이터 형식 변환을 확장 변환으로만 제한하고, 지연 바인딩을 허용하지 않으며, 결과적으로 Object 형식이 되는 암시적 형식 지정을 허용하지 않습니다.

구문

Option Strict { On | Off }

부분

용어 정의
On 선택 사항. Option Strict 검사를 사용하도록 설정합니다.
Off 선택 사항. Option Strict 검사를 사용하지 않도록 설정합니다.

설명

파일에 Option Strict On 또는 Option Strict가 나타나면 다음 조건으로 인해 컴파일 시간 오류가 발생합니다.

  • 암시적 축소 변환

  • 런타임에 바인딩

  • Object 유형으로 이어지는 암시적 형식 지정

참고 항목

컴파일 페이지, 프로젝트 디자이너(Visual Basic)에서 설정할 수 있는 경고 구성에는 컴파일 시간 오류를 일으키는 세 가지 조건에 해당하는 세 가지 설정이 있습니다. 이러한 설정을 사용하는 방법에 대한 자세한 내용은 이 항목 뒷부분의 IDE에서 경고 구성을 설정하려면을 참조하세요.

Option Strict Off 문은 관련 IDE 설정이 이러한 오류나 경고를 켜도록 지정하더라도 세 가지 조건 모두에 대한 오류 및 경고 검사를 끕니다. Option Strict On 문은 관련 IDE 설정이 이러한 오류나 경고를 끄도록 지정하더라도 세 가지 조건 모두에 대해 오류 및 경고 검사를 켭니다.

사용되는 경우 Option Strict 문은 파일의 다른 코드 문 앞에 나타나야 합니다.

Option StrictOn으로 설정하면 Visual Basic은 모든 프로그래밍 요소에 대해 데이터 형식이 지정되었는지 확인합니다. 데이터 형식은 명시적으로 지정하거나 지역 형식 유추를 사용하여 지정할 수 있습니다. 다음과 같은 이유로 모든 프로그래밍 요소에 대해 데이터 형식을 지정하는 것이 좋습니다.

  • 변수 및 매개 변수에 대한 IntelliSense 지원을 사용하도록 설정합니다. 이를 통해 코드를 입력할 때 해당 속성과 기타 멤버를 볼 수 있습니다.

  • 이를 통해 컴파일러는 형식 검사를 수행할 수 있습니다. 형식 검사는 형식 변환 오류로 인해 런타임 시 실패할 수 있는 문을 찾는 데 도움이 됩니다. 또한 해당 메서드를 지원하지 않는 개체에 대한 메서드 호출도 식별합니다.

  • 코드 실행 속도가 빨라집니다. 그 이유 중 하나는 프로그래밍 요소에 대한 데이터 형식을 할당하지 않으면 Visual Basic 컴파일러가 해당 요소에 Object 형식을 할당하기 때문입니다. 컴파일된 코드는 Object와 다른 데이터 형식 간에 앞뒤로 변환해야 할 수 있으며 이로 인해 성능이 저하됩니다.

암시적 축소 변환 오류

암시적 축소 변환 오류는 축소 변환인 암시적 데이터 형식 변환이 있을 경우 발생합니다.

Visual Basic에서는 많은 데이터 형식을 다른 데이터 형식으로 변환할 수 있습니다. 한 데이터 형식의 값이 정밀도가 낮거나 용량이 더 작은 데이터 형식으로 변환되면 데이터 손실이 발생할 수 있습니다. 이러한 축소 변환이 실패하면 런타임 오류가 발생합니다. Option Strict는 이러한 축소 변환을 피할 수 있도록 이러한 축소 변환에 대한 컴파일 시간 알림을 보장합니다. 자세한 내용은 암시적 및 명시적 변환전환 확대 및 축소를 참조하세요.

오류를 일으킬 수 있는 변환에는 식에서 발생하는 암시적 변환이 포함됩니다. 자세한 내용은 아래 항목을 참조하세요.

& 연산자를 사용하여 문자열을 연결하면 문자열에 대한 모든 변환이 확장되는 것으로 간주됩니다. 따라서 이러한 변환은 Option Strict가 켜져 있어도 암시적 축소 변환 오류를 생성하지 않습니다.

해당 매개 변수와 데이터 형식이 다른 인수가 있는 메서드를 호출하면 Option Strict가 설정된 경우 축소 변환으로 인해 컴파일 시간 오류가 발생합니다. 확대 변환이나 명시적 변환을 사용하면 컴파일 시간 오류를 방지할 수 있습니다.

For Each…Next 컬렉션의 요소를 루프 제어 변수로 변환할 때 컴파일 시간에 암시적 축소 변환 오류가 억제됩니다. 이는 Option Strict가 켜져 있는 경우에도 발생합니다. 자세한 내용은 For Each...Next 문의 "축소 변환" 섹션을 참조하세요.

런타임에 바인딩 오류

개체에 Object 형식으로 선언된 변수의 속성 또는 메서드에 할당되면 런타임에 바인딩됩니다. 자세한 내용은 조기 및 후기 바인딩을 참조하세요.

암시적 개체 형식 오류

암시적 개체 형식 오류는 선언된 변수에 대해 적절한 형식이 유추될 수 없어 Object의 형식이 유추될 때 발생합니다. 주로 As 절을 사용하지 않고 Dim 문을 사용하여 변수를 선언하고, Option Infer가 꺼져 있는 경우 발생합니다. 자세한 내용은 Option Infer 문Visual Basic 언어 사양을 참조하세요.

메서드 매개 변수의 경우 Option Strict가 꺼져 있으면 As 절은 선택 사항입니다. 그러나 하나의 매개 변수가 As 절을 사용하는 경우 모두 해당 절을 사용해야 합니다. Option Strict가 켜져 있으면 모든 매개 변수 정의에 As 절이 필요합니다.

As 절을 사용하지 않고 변수를 선언하고 이를 Nothing으로 설정하면 변수는 Object 형식을 갖습니다. 이 경우 Option Strict가 켜져 있고 Option Infer가 켜져 있으면 컴파일 시간 오류가 발생하지 않습니다. 이러한 예는 Dim something = Nothing입니다.

기본 데이터 형식 및 값

다음 테이블에는 Dim 문에서 데이터 형식과 이니셜라이저를 지정하는 다양한 조합의 결과에 대한 설명이 나와 있습니다.

데이터 형식 지정 여부 이니셜라이저 지정 여부 예제 결과
아니요 아니요 Dim qty Option Strict가 off(기본값)이면 변수는 Nothing으로 설정됩니다.

Option Strict가 on이면 컴파일 시간 오류가 발생합니다.
Dim qty = 5 Option Infer가 on(기본값)이면 변수가 이니셜라이저의 데이터 형식을 사용합니다. 지역 형식 유추을 참조하세요.

Option Infer가 off이고 Option Strict고 off이면 변수가 Object의 데이터 형식을 사용합니다.

Option Infer가 off이고 Option Strict는 on이면 컴파일 시간 오류가 발생합니다.
아니요 Dim qty As Integer 변수는 데이터 형식의 기본값으로 초기화됩니다. 자세한 내용은 Dim 문을 참조하세요.
Dim qty As Integer = 5 이니셜라이저의 데이터 형식을 지정한 데이터 형식으로 변환할 수 없으면 컴파일 시간 오류가 발생합니다.

Option Strict 문이 없는 경우

소스 코드에 Option Strict 문이 포함되어 있지 않으면 컴파일 페이지, 프로젝트 디자이너(Visual Basic)Option strict 설정이 사용됩니다. 컴파일 페이지에는 오류를 생성하는 조건을 추가로 제어할 수 있는 설정이 있습니다.

명령줄 컴파일러를 사용하는 경우 -optionstrict 컴파일러 옵션을 사용하여 Option Strict에 대한 설정을 지정할 수 있습니다.

IDE에서 Option Strict를 설정하려면

참고 항목

일부 Visual Studio 사용자 인터페이스 요소의 경우 다음 지침에 설명된 것과 다른 이름 또는 위치가 시스템에 표시될 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 IDE 개인 설정을 참조하세요.

  1. 솔루션 탐색기에서 프로젝트를 선택합니다. 프로젝트 메뉴에서 속성을 클릭합니다.

  2. 컴파일 탭에서 Option Strict 상자에 값을 설정합니다.

IDE에서 경고 구성을 설정하려면

Option Strict 문 대신 컴파일 페이지, 프로젝트 디자이너(Visual Basic)를 사용하면 오류를 생성하는 조건을 추가로 제어할 수 있습니다. 컴파일 페이지경고 구성 섹션에 Option Strict가 켜져 있을 때 컴파일 시간 오류가 발생하는 세 가지 조건에 해당하는 설정이 있습니다. 이러한 설정은 다음과 같습니다.

  • 암시적 변환

  • 런타임에 바인딩; 호출이 실패할 수 있음

  • 암시적 형식; 개체로 간주

Option StrictOn으로 설정하는 경우 이러한 세 가지 경고 구성 설정은 모두 Error로 설정됩니다. Option StrictOff로 설정하는 경우 세 가지 설정은 모두 None으로 설정됩니다.

각 경고 구성 설정은 None, Warning 또는 Error로 개별적으로 변경할 수 있습니다. 세 가지 경고 구성 설정이 모두 Error로 설정된 경우 OnOption strict 상자에 표시됩니다. 세 가지 모두 None으로 설정된 경우 Off가 이 상자에 표시됩니다. 이러한 설정의 다른 조합의 경우 (사용자 지정)이 나타납니다.

새 프로젝트에 대해 Option Strict 기본 설정을 지정하려면

프로젝트를 만들면 컴파일 탭의 Option Strict 설정이 옵션 대화 상자의 Option Strict 설정으로 설정됩니다.

이 대화 상자에서 Option Strict를 설정하려면 도구 메뉴에서 옵션을 클릭합니다. 옵션 대화 상자에서 프로젝트 및 솔루션을 확장하고 VB 기본값을 클릭합니다. VB 기본값의 초기 기본 설정은 Off입니다.

명령줄에서 Option Strict를 설정하려면

vbc 명령에 -optionstrict 컴파일러 옵션을 포함합니다.

예 1

다음 예에서는 축소 변환인 암시적 형식 변환으로 인해 발생하는 컴파일 시간 오류를 보여 줍니다. 이 오류 범주는 컴파일 페이지암시적 변환 조건에 해당합니다.

' If Option Strict is on, this implicit narrowing
' conversion causes a compile-time error.
' The commented statements below use explicit
' conversions to avoid a compile-time error.
Dim cyclists As Long = 5
Dim bicycles As Integer = cyclists
'Dim bicycles As Integer = CType(cyclists, Integer)
'Dim bicycles As Integer = CInt(cyclists)
'Dim bicycles As Integer = Convert.ToInt32(cyclists)


' If Option Strict is on, this implicit narrowing
' conversion causes a compile-time error.
' The commented statements below use explicit
' conversions to avoid a compile-time error.
Dim charVal As Char = "a"
'Dim charVal As Char = "a"c
'Dim charVal As Char = CType("a", Char)


' If Option Strict is on, a compile-time error occurs.
' If Option Strict is off, the string is implicitly converted
' to a Double, and then is added to the other number.
Dim myAge As Integer = "34" + 6


' If Option Strict is on, a compile-time error occurs.
' If Option Strict is off, the floating-point number
' is implicitly converted to a Long.
Dim num = 123.45 \ 10

예제 2

다음 예에서는 런타임에 바인딩으로 인해 발생한 컴파일 시간 오류를 보여 줍니다. 이 오류 범주는 지연 바인딩에 해당합니다. 컴파일 페이지의 런타임 조건에서 호출이 실패할 수 있습니다.

' If Option Strict is on, this late binding
' causes a compile-time error. If Option Strict
' is off, the late binding instead causes a
' run-time error.
Dim punchCard As New Object
punchCard.Column = 5

예 3

다음 예에서는 Object의 암시적 형식으로 선언된 변수로 인해 발생한 오류를 보여 줍니다. 이 오류 범주는 암시적 형식에 해당합니다. 컴파일 페이지에서 개체 가정 조건입니다.

' If Option Strict is on and Option Infer is off,
' this Dim statement without an As clause 
' causes a compile-time error.
Dim cardReaders = 5

' If Option Strict is on, a compile-time error occurs.
' If Option Strict is off, the variable is set to Nothing.
Dim dryWall
' If Option Strict is on, this parameter without an
' As clause causes a compile-time error.
Private Sub DetectIntergalacticRange(ByVal photonAttenuation)

End Sub

참고 항목