선택적 매개 변수
업데이트: 2007년 11월
프로시저 매개 변수를 선택적 요소로 지정하여 프로시저를 호출할 때 인수를 지정하지 않아도 되도록 할 수 있습니다. 선택적 매개 변수는 프로시저 선언에서 Optional 키워드로 표시됩니다. 이 때 적용되는 규칙은 다음과 같습니다.
프로시저 정의의 모든 선택적 매개 변수에는 기본값을 지정해야 합니다.
선택적 매개 변수의 기본값은 상수 식이어야 합니다.
프로시저 정의에서 선택적 매개 변수 뒤에 오는 매개 변수도 모두 선택적 요소여야 합니다.
다음 구문은 선택적 매개 변수를 사용하여 프로시저를 선언하는 방법을 보여 줍니다.
Sub sub name(ByVal parameter 1 As data type 1, Optional ByVal parameter 2 As data type 2 = default value)
선택적 매개 변수가 있는 프로시저 호출
선택적 매개 변수가 있는 프로시저를 호출하는 경우 해당 인수를 지정할지 여부를 선택할 수 있습니다. 선택하지 않으면 선택적 매개 변수에 대해 선언된 기본값이 사용됩니다.
인수 목록에서 하나 이상의 선택적 인수를 생략하는 경우 그 자리에 쉼표를 사용하여 생략된 위치를 표시합니다. 다음 호출 샘플에서는 첫 번째와 네 번째 인수가 제공되고 두 번째와 세 번째 인수는 제공되지 않습니다.
Call sub name(argument 1, , , argument 4)
선택적 인수의 존재 여부 확인
프로시저는 지정된 인수가 생략되었는지 또는 호출 코드가 명시적으로 기본값을 제공했는지 여부를 런타임에서 감지할 수 없습니다. 이를 알아보려면 특이한 값을 기본값으로 설정하면 됩니다. 다음 예제에서는 선택적 매개 변수 office를 정의하고 기본값 QJZ를 테스트하여 호출에서 해당 매개 변수가 생략되었는지 확인합니다.
Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
If office = "QJZ" Then
Debug.WriteLine("office not supplied -- using Headquarters")
office = "Headquarters"
End If
' Insert code to notify headquarters or specified office.
End Sub
선택적 매개 변수가 String과 같은 참조 형식일 경우 Nothing이 그 인수에 예상된 값이 아니면 이 값을 기본값으로 사용할 수 있습니다.
선택적 매개 변수 및 오버로드
선택적 매개 변수가 있는 프로시저를 정의하는 또 다른 방법은 오버로드를 사용하는 것입니다. 선택적 매개 변수가 하나이면 프로시저의 오버로드된 두 버전을 매개 변수를 사용하는 버전과 매개 변수를 사용하지 않는 버전으로 정의할 수 있습니다. 이러한 방식은 선택적 매개 변수의 개수가 증가할수록 더욱 복잡해지지만 호출 프로그램이 각 선택적 인수를 제공했는지 여부를 확실히 알 수 있다는 장점이 있습니다.