매개 변수 배열(Visual Basic)

일반적으로 프로시저 선언에서 지정하는 것보다 더 많은 인수를 사용하여 프로시저를 호출할 수 없습니다. 무한한 수의 인수가 필요한 경우 매개 변수 배열을 선언할 수 있으며 이를 통해 프로시저에서 매개 변수의 값 배열을 허용할 수 있습니다. 프로시저를 정의할 때 매개 변수 배열의 요소 수를 알 필요는 없습니다. 배열 크기는 프로시저를 호출할 때마다 개별적으로 결정됩니다.

ParamArray 선언

ParamArray 키워드를 사용하여 매개 변수 목록의 매개 변수 배열을 나타냅니다. 다음 규칙이 적용됩니다.

  • 프로시저는 하나의 매개 변수 배열만 정의할 수 있으며 프로시저 정의의 마지막 매개 변수여야 합니다.

  • 매개 변수 배열은 값으로 전달되어야 합니다. 프로시저 정의에 ByVal 키워드를 명시적으로 포함하는 것이 좋은 프로그래밍 방법입니다.

  • 매개 변수 배열은 자동으로 선택 사항이 됩니다. 기본값은 매개 변수 배열의 요소 형식에 대한 비어 있는 1차원 배열입니다.

  • 매개 변수 배열 앞에 오는 모든 매개 변수가 필요합니다. 매개 변수 배열은 유일한 선택적 매개 변수여야 합니다.

ParamArray 호출

매개 변수 배열을 정의하는 프로시저를 호출할 때 다음 방법 중 하나로 인수를 제공할 수 있습니다.

  • Nothing. 즉, ParamArray 인수를 생략할 수 있습니다. 이 경우 빈 배열이 프로시저에 전달됩니다. Nothing 키워드를 명시적으로 전달하는 경우 null 배열이 프로시저에 전달되고 호출된 프로시저가 이 조건을 확인하지 않으면 NullReferenceException이 발생할 수 있습니다.

  • 쉼표로 구분된 임의 개의 인수 목록입니다. 각 인수의 데이터 형식은 ParamArray 요소 형식으로 암시적으로 변환할 수 있어야 합니다.

  • 매개 변수 배열의 요소 형식과 동일한 요소 형식의 배열입니다.

모든 경우에 프로시저 내의 코드는 매개 변수 배열을 ParamArray 데이터 형식과 동일한 데이터 형식의 요소가 있는 1차원 배열로 처리합니다.

Important

무한히 커질 수 있는 배열을 처리할 때마다 애플리케이션의 일부 내부 용량이 초과될 위험이 있습니다. 매개 변수 배열을 허용하는 경우 호출 코드가 전달한 배열의 크기를 테스트해야 합니다. 배열 크기가 애플리케이션에 비해 너무 큰 경우 적절한 조치를 취하세요. 자세한 내용은 배열을 참조하세요.

예시

다음 예제에서는 함수 calcSum을 정의하고 호출합니다. 매개 변수 argsParamArray 한정자를 사용하면 함수가 다양한 개수의 인수를 허용할 수 있습니다.

Module Module1

    Sub Main()
        ' In the following function call, CalcSum's local variables
        ' are assigned the following values: args(0) = 4, args(1) = 3,
        ' and so on. The displayed sum is 10.
        Dim returnedValue As Double = CalcSum(4, 3, 2, 1)
        Console.WriteLine("Sum: " & returnedValue)
        ' Parameter args accepts zero or more arguments. The sum
        ' displayed by the following statements is 0.
        returnedValue = CalcSum()
        Console.WriteLine("Sum: " & returnedValue)
    End Sub

    Public Function CalcSum(ByVal ParamArray args() As Double) As Double
        CalcSum = 0
        If args.Length <= 0 Then Exit Function
        For i As Integer = 0 To UBound(args, 1)
            CalcSum += args(i)
        Next i
    End Function

End Module

다음 예제에서는 매개 변수 배열을 사용하여 프로시저를 정의하고 매개 변수 배열에 전달된 모든 배열 요소의 값을 출력합니다.

Sub studentScores(ByVal name As String, ByVal ParamArray scores() As String)
    Debug.WriteLine("Scores for " & name & ":" & vbCrLf)
    ' Use UBound to determine largest subscript of the array.
    For i As Integer = 0 To UBound(scores, 1)
        Debug.WriteLine("Score " & i & ": " & scores(i))
    Next i
End Sub
Call studentScores("Anne", "10", "26", "32", "15", "22", "24", "16")
Call studentScores("Mary", "High", "Low", "Average", "High")
Dim JohnScores() As String = {"35", "Absent", "21", "30"}
Call studentScores("John", JohnScores)

참고 항목