질문 배경
Option Strict는 Visual Basic .NET에서 타입 안전성을 높이기 위해 도입되었습니다. 이전 버전의 언어(VB6)에서는 암묵적인 타입 변환이 발생하여 프로그램의 예기치 않은 동작과 찾기 힘든 오류가 발생하였습니다. Strict를 활성화하면 동작이 더 명확하고 엄격한 타입화가 이루어집니다.
문제
암묵적인 타입 변환(예: 문자열을 숫자 변수에 할당하거나 함수에서 다른 타입을 반환하는 것)은 실행 시 오류를 초래합니다. Option Strict Off인 프로젝트는 종종 찾기 힘든 버그의 원인이 됩니다.
해결책
Option Strict On에서는 암묵적인 타입 변환이 허용되지 않으며, 모든 변수 선언, 매개변수 및 함수의 반환 타입은 명시적으로 지정해야 합니다. 이는 컴파일 단계에서 이미 많은 오류를 방지하고 코드 품질을 높이는 데 기여합니다.
코드 예:
Option Strict On Dim x As Integer x = "123" ' 컴파일 오류 — 명시적 변환이 필요함 x = CInt("123") ' 괜찮음 Function GetNumber(ByVal input As String) As Integer Return input ' 컴파일 오류 End Function
주요 특징:
Option Strict Off는 왜 필요한가요, Strict On이 더 편리하고 안전한데?
Option Strict Off는 이미 많은 암묵적 변환이 내재된 레거시 코드를 지원하기 위해 사용됩니다(예: VB6에서의 마이그레이션). 새로운 프로젝트에서는 보다 신뢰할 수 있고 안전한 코드를 위해 Strict를 활성화하는 것이 권장됩니다.
프로젝트 전체적으로 기본값이 Off인 경우 파일 수준에서 타입 선택의 엄격성을 되돌릴 수 있나요?
네, 개별 모듈 또는 파일의 시작 부분에 Option Strict On 지시어를 추가하면 그 파일에 대해서만 엄격한 타입 검사가 적용됩니다.
' 파일의 시작 부분: Option Strict On
Strict가 Object를 통한 늦은 바인딩 사용에 방해가 됩니까?
네, Option Strict On에서는 컴파일 시 인식되지 않는 객체의 멤버를 호출할 수 없습니다(늦은 바인딩). 알려진 타입으로 객체를 변환하거나 Off 상태에서만 동적 작업을 사용해야 합니다.
프로그래머가 Option Strict를 활성화하지 않아, TextBox에서 입력된 데이터를 수치 변수에 직접 할당했습니다. 잘못된 데이터를 입력하자 프로그램이 비정상 종료되었습니다.
장점:
단점:
프로그래머가 Option Strict On을 활성화하여 모든 변환이 TryParse를 통해 명시적으로 수행되었습니다. 오류가 컴파일 단계에서 잡히고 실행 시 예외가 최소화되었습니다.
장점:
단점: