Visual Basic(클래식 및 .NET)에서는 절차 및 함수에서 Optional 키워드를 사용하여 선택적 매개변수를 선언할 수 있습니다. 또한 이러한 매개변수에 대한 기본값을 설정할 수도 있습니다.
구문:
Sub SendMessage(message As String, Optional urgent As Boolean = False) If urgent Then Console.WriteLine("URGENT: " & message) Else Console.WriteLine(message) End If End Sub ' 호출: SendMessage("안녕하세요!") ' urgent = False SendMessage("중요한 메시지!", True)
중요한 주의사항:
Optional매개변수는 항상 매개변수 목록의 마지막이어야 합니다.- 매개변수에 기본값이 없으면, 그것은
Nothing또는 유형의 기본값(예: Integer의 경우 0)으로 정의됩니다.- 클래식 VB에서는 선택적 형식 옵션이 제한됩니다: 기본값이 없는 형식을 사용할 수 없습니다(예: null이 아닌 클래스).
질문: Visual Basic에서 선택적(Optional) 매개변수 뒤에 필수 매개변수를 선언할 수 있나요? 설명해 주세요(아니오/예) 그리고 이를 피하는 방법은 무엇인가요?
답변: 아니오, 최소한 하나의 매개변수를 Optional로 선언한 후에는 모든 후속 매개변수도 Optional로 선언해야 합니다. 이는 매개변수를 위치에 따라 전달할 때 혼란을 피하기 위한 구문 요구사항입니다.
잘못된 코드 예:
Sub PrintReport(Optional pageSize As String = "A4", copies As Integer) ' 컴파일 오류: 필수 매개변수는 선택적 매개변수 뒤에 올 수 없습니다. End Sub
해결 방법 — 매개변수의 순서를 변경하세요:
Sub PrintReport(copies As Integer, Optional pageSize As String = "A4") ' 올바른 버전 End Sub
이야기
대형 프로젝트에서 고객이 파일 공유 절차에 선택적 매개변수를 추가하면서 기본값을 잊어버렸습니다. 그로 인해 매개변수를 지정하지 않고 메서드를 호출할 때
Nothing이 파일 이름으로 처리되어 로딩 오류가 발생했습니다.
이야기
다른 시스템에서 메서드 서명을 복사하는 과정에서 매개변수의 순서가 잘못되었습니다 — 필수 매개변수가
Optional뒤로 이동했습니다. 프로그래머는 순서만 변경하여 컴파일 오류를 수정했지만, 모든 호출에서 번호가 변경된 사실을 인지하지 못했습니다. 이로 인해 코드의 30곳 이상에서 함수가 잘못 작동했습니다.
이야기
코드 크기를 줄이기 위해 문자열 매개변수의 기본값으로 빈 문자열을 설정하였습니다. 그러나 여러 경우에 비어 있는 값의 처리 방식이 누락된 매개변수의 처리와 달라져 대화 상자의 비논리적인 동작을 초래했습니다 — 표준 텍스트가 표시되는 대신 설명 없이 양식이 숨겨지는 일이 발생했습니다.