본문 바로가기
C#

[C#] 가변인자 매개변수 params

by 코모's 2023. 7. 25.
반응형

params 란?

  • 함수에서 매개변수를 넘길때 1,2,3개 이렇게 개수를 지정해 주었던 것과 달리, params 키워드를 사용하면 개수에 제한 없이 매개변수를 넘길 수 있다.
  • 가변 인자 매개변수 = 개수가 변하는 인자들을 넘길 수 있는 매개변수

 

params 규칙

  • 선언 부에서 params 키워드는 타입 맨 앞에 와야한다.
  • 가변인자 매개변수를 선언할 때는 []를 이용하여 1차원 배열로 선언해야 한다.
  • 데이터 타입이 애매할 때는 모든 클래스의 상위 클래스인 object 클래스 배열을 사용할 수 있다.
  • 호출부에서 각 매개변수는 쉼표로 구분해야한다.
  • 호출부에서 매개변수를 보내지 않아도 된다. 이경우 길이는 0이되고 비어있는 매개변수가 된다.
    • 선언 - public static void Add(params int[] list)
    • 호출 - Add(1,2,3,4,5,6,7,8,9,3,5,6,3,8,7,4,3,7,9) [가능]

 

특정한 데이터 타입 지정 예시

public static void Add(params int[] myList)
    {
        int sum = 0;
            
        //foreach example
        foreach (int elem in myList)
        {
            Console.Write(elem.ToString() + " ");
            sum += elem;
        }
 
        /* for loop example.
        for(int i=0; i<myList.Length; ++i)
        {
            Console.Write(myList[i].ToString() + " ");
            sum += myList[i];
        }
        */
 
        Console.WriteLine();
        Console.WriteLine("params Length : " + myList.Length.ToString());
        Console.WriteLine("params sum : " + sum.ToString());
        Console.WriteLine();
    }
 
    static void Main(string[] args)
    {
        Console.WriteLine("1. 매개변수 여러개");
        Add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
 
        Console.WriteLine("2. 매개변수 없음");
        Add();
    }
    
    
    //1. 매개변수 여러개
    //params Length : 10
    //params sum : 55
    
    //2. 매개변수 없음
    //params Length : 0
    //params sum : 0

 

최상위 타입 objcet 지정 예시

public static void Mixed(params object[] myList)
    {
        Console.WriteLine("[Length]      : " + myList.Length.ToString());
            
        //------------------------------------------
        Console.Write("[Print all]   : ");
        foreach (object elem in myList)
        {
            //모든 요소 출력.
            Console.Write(elem.ToString() + " ");
        }
        Console.WriteLine();
            
        //------------------------------------------
        Console.Write("[string type] : ");
        for (int i=0; i<myList.Length; ++i)
        {
            Type t = myList[i].GetType();
            if (t.Equals(typeof(string)))
            {
                //string 타입과 같은것만 출력
                Console.Write(myList[i].ToString() + " ");
            }
        }
        Console.WriteLine();
         
        //------------------------------------------
        Console.Write("[int type]    : ");
        foreach (object elem in myList)
        {
            Type t = elem.GetType();
            if (t.Equals(typeof(int)))
            {
                //int 타입과 같은것만 출력
                Console.Write(elem.ToString() + " ");
            }
        }
        Console.WriteLine();
    }
 
    static void Main(string[] args)
    {
        Mixed(1, "Black", 2, 3, 4, "C#", 11, "Example");
    }
    
    
    //[Length]      : 8
    //[Print all]   : 1 Black 2 3 4 C# Example
    //[string type] : Black C# Example
    //[int type]    : 1 2 3 4 11

 

 

 

 

반응형