암시적 선언과 명시적 선언
업데이트: 2007년 11월
기본적으로 Visual Basic 컴파일러에서는 명시적 선언을 사용합니다. 따라서 모든 변수를 사용하기 전에 선언해야 합니다. 이 요구 사항을 무시하고 암시적 선언을 허용할 수 있습니다.
Visual Basic에서는 명시적 선언을 제어하는 스위치를 제공합니다. 기본적으로 이 스위치는 On으로 설정되어 있으므로 컴파일러에서 명식적 선언을 사용합니다. 이 스위치를 Off로 변경하면 변수를 선언하지 않고도 사용할 수 있습니다.
명시적 선언 스위치. 다음과 같은 방법으로 명시적 선언 스위치를 On 또는 Off로 설정할 수 있습니다.
IDE(통합 개발 환경)에서 적절한 프로젝트 속성을 설정합니다. 프로젝트 메뉴에서 <ProjectName> 속성을 클릭한 다음 컴파일 탭을 클릭합니다. Option explicit, Option strict 및 Option compare의 기본값을 설정할 수 있습니다.
/optionexplicit 명령줄 컴파일러 옵션을 지정합니다.
해당 코드의 맨 앞에 Option Explicit 문(Visual Basic)을 삽입합니다.
OptionExplicit 문을 사용하면 프로젝트 속성과 컴파일러 옵션 설정이 모두 이 설정으로 재정의되지만 재정의된 설정은 이 문이 나타나는 소스 코드 파일에만 적용됩니다.
성능상의 장점. OptionExplicit을 On으로 설정하면 런타임이 아니라 컴파일 타임에 형식 유추를 강제로 수행할 수 있는 장점이 있습니다. 이렇게 하면 성능이 향상됩니다.
암시적 선언
OptionExplicit을 Off로 설정하면 코드에서 변수를 사용하기만 하면 변수가 암시적으로 선언됩니다. 컴파일러에서는 암시적으로 선언된 모든 변수에 Object 데이터 형식을 할당합니다. 그러나 응용 프로그램의 효율성 측면에서는 모든 변수를 명시적으로 선언하고 특정 데이터 형식을 지정하는 것이 좋습니다. 이렇게 하면 이름 충돌 오류와 맞춤법 오류가 발생할 확률이 줄어듭니다. 또한 컴파일러는 잠재적인 런타임 오류(예: Short에 Integer 할당)를 찾을 수 있습니다.
잠재적 오류
의도하지 않은 새 변수
지역 변수를 선언하지 않는 프로시저를 작성할 수 있습니다. 다음 예제에서 이 방법을 보여 줍니다.
Function safeSqrt(num)
' Make sure num is positive for square root.
tempVal = Math.Abs(num)
Return Math.Sqrt(tempVal)
End Function
Visual Basic에서는 자동으로 tempVal을 지역 변수로 만들며 개발자는 이 변수를 명시적으로 선언한 것처럼 사용할 수 있습니다. 이 방법은 편리하지만 변수 이름이 잘못된 경우 미세한 코드 오류가 발생할 수 있습니다. 위의 예제에서 다음과 같이 프로시저를 작성했다고 가정합니다.
Function safeSqrt(num)
' Make sure num is positive for square root.
tempVal = Math.Abs(num)
Return Math.Sqrt(temVal)
End Function
이 코드는 동일하게 보일 수도 있습니다. 그러나 tempVal 변수는 Sqrt에 대해 올바른 인수가 아니기 때문에 컴파일러는 temVal이라는 추가 지역 변수를 만듭니다. 이 변수에는 값을 할당할 수 없으며 함수는 항상 0을 반환합니다.
의도하지 않은 기존 요소 참조
Visual Basic에서는 새 이름을 발견할 경우 사용자가 새 변수를 암시적으로 선언하려는 것인지 또는 기존 변수 이름을 잘못 쓴 것인지를 확인할 수 없습니다. 따라서 해당 이름의 새 변수를 만듭니다. 이때 해당 이름으로 정의된 변수 또는 다른 프로그래밍 요소가 이미 있으면 코드에서는 의도와 다르게 이 정의를 사용하게 될 수 있습니다.
명시적 선언을 사용하면 변수의 이름이 잘못 지정되는 것을 막을 수 있습니다.
명시적 선언
앞의 예제에서 safeSqrt 프로시저를 포함하는 소스 파일에 명시적 선언을 적용하면 Visual Basic에서 tempVal과 temVal이 선언되지 않은 변수로 인식되고 두 변수 모두에 대해 오류가 발생합니다. 따라서 tempVal은 명시적으로 선언해야 합니다. 다음 예제에서 이 방법을 보여 줍니다.
Function safeSqrt(ByVal num As Double) As Double
' Make sure num is positive for square root.
Dim tempVal As Double = Math.Abs(num)
Return Math.Sqrt(temVal)
End Function
이렇게 수정된 코드를 사용하면 Visual Basic에서는 철자가 잘못된 temVal에 대해 오류 메시지를 표시하므로 즉시 문제를 파악할 수 있습니다. 명시적 선언은 이러한 오류를 찾아내는 데 도움을 주기 때문에 모든 코드에서 명시적 선언을 사용하는 것이 좋습니다.
참고: |
---|
OptionExplicit 문은 파일 단위로 적용됩니다. 이 문은 명시적 변수 선언 사용을 제어하려고 하는 모든 소스 코드 파일의 시작 부분에 있어야 합니다. |