C#

[스크랩] 무제한으로 매개 변수 사용(C# 및 Java) - params(가변인자)

Binceline 2012. 12. 20. 18:02

출처 : http://msdn.microsoft.com/ko-kr/library/ms228391(v=vs.90).aspx


C#에서는 메서드를 선언할 때 params 키워드를 지정하여 개수가 가변적인 매개 변수를 메서드에 전달할 수 있습니다. 인수 목록에는 일반적인 매개 변수도 포함될 수 있지만params 키워드를 사용하여 선언한 매개 변수는 목록의 맨 마지막에 사용해야 합니다. 그 형태는 가변 길이 배열과 같으며 params 매개 변수는 각 메서드에서 하나만 사용할 수 있습니다.

컴파일러에서 메서드 호출을 확인하려 시도할 때는 해당 인수 목록이 호출된 메서드와 일치하는 메서드를 조회합니다. 인수 목록과 일치하는 메서드 오버로드를 찾을 수 없지만 적절한 형식의 params 매개 변수와 일치하는 버전이 있는 경우 배열에 인수를 추가로 배치하여 이 메서드를 호출합니다.

다음 예제에서는 이러한 과정을 보여 줍니다.

class TestParams
{
    private static void Average(string title, params int[] values)
    {
        int sum = 0;
        System.Console.Write("Average of {0} (", title);

        for (int i = 0; i < values.Length; i++)
        {
            sum += values[i];
            System.Console.Write(values[i] + ", ");
        }
        System.Console.WriteLine("): {0}", (float)sum/values.Length);
    }
    static void Main()
    {
        Average ("List One", 5, 10, 15);
        Average ("List Two", 5, 10, 15, 20, 25, 30);
    }
}


위 예제에서 Average 메서드는 정수 배열 형식의 params 매개 변수를 사용하여 선언되므로 이 메서드를 호출할 때 사용할 수 있는 인수의 수에는 제한이 없습니다. 그 출력은 다음과 같습니다.

Average of List One (5, 10, 15, ): 10

Average of List Two (5, 10, 15, 20, 25, 30, ): 17.5

다양한 형식의 결정되지 않은 매개 변수를 사용할 수 있도록 하려면 Object 형식의 params 매개 변수를 지정합니다.

반응형