상세 컨텐츠

본문 제목

C#에서의 params 에 대하여

프로그래밍/C#

by TickTack 2020. 7. 14. 19:56

본문

C#에서 코드를 보다보면 간혹 메서드의 인자에 params라는 문구가 들어가있는 것을 확인할 수 있습니다.

params라는 문구는 어떤 기능을 하는지 궁금할 수 있는데요.

이번에는 해당 문구에 대한 기능을 간단하게 알아보겠습니다.

 

먼저 params는 메서드에만 사용가능합니다.

이유는 params라는 것이 메서드에 인자를 활용할 때 개수를 유동적으로 처리해주는 기능이기 때문입니다.

인자로 배열을 활용하는 것과 비슷하나 배열뿐만 아니라 일반 단순 개체도 사용가능한 것이 차이점입니다.

코드로 한 번 확인해보겠습니다.

 

private void Help_Load(object sender, EventArgs e)
        {
            int[] i = {1, 5, 7, 115, 321 };
            string[] t = {"테", "스", "트", "배", "열" };
            object[] o = {"string", 8.1, 891, false };

            test("a", "1", "T", "테", "!");
            test2("문자", 0.7, 678, true);

            Console.WriteLine("---------------------------");

            test(t);
            test2(o);

            Console.WriteLine("---------------------------");

            test2(i);
            test2(t);
        }

        private void test(params string[] value)
        {
            Console.Write("test : ");

            for (int i = 0; i < value.Length; i++)
                Console.Write(value[i] + " ");

            Console.WriteLine();
        }

        private void test2(params object[] value)
        {
            Console.Write("test2 : ");

            for (int i = 0; i < value.Length; i++)
                Console.Write(value[i] + " ");

            Console.WriteLine();
        }

 

아래는 결과화면입니다.

 

결과 화면

 

폼 로드 이벤트에 각 메서드와 인자들을 넣어 동작하도록 되어있습니다.

결과가 콘솔창으로 나오는 이유는 '콘솔 애플리캐이션'으로 빌드했기 때문입니다.

 

결과화면에 대하여 설명하겠습니다.

 

- 첫 줄은 각 문자를 순서대로 나열하여 적용하였습니다.

- 두 번째줄도 첫 번째줄과 같이 각 타입을 종류별로 나열하여 적용하였습니다.

- 세 번째줄은 미리 선언한 string[]을 인자로 활용하였습니다.

- 네 번째줄은 미리 선언한 object[]을 인자로 활용하였습니다.

- 다섯 번째줄은 미리 선언한 int[]을 인자로 활용하였습니다.

- 여섯 번째줄은 미리 선언한 string[]을 인자로 활용하였습니다.

 

살펴보면 배열을 사용하지 않고도 배열을 사용한 효과가 나타나며,

object[]로 활용하면 여러 종류의 타입을 사용할 수 있습니다.

또한, 배열변수를 사용하여도 같은 효과가 나타나며,

string[]은 정상적으로 나오지만 int[]object[]를 사용한 메서드에 넣을 경우 값이 정상적으로 나오지 않습니다.

마지막으로 인자를 넘기지 않을 수 있고 이 경우엔 Length는 0입니다.

 

파란색 내용에 대해서는 개인적인 견해이나

int는 값 형식이고, string 및 object는 참조 형식이기 때문에 타입이 달라서 발생하는 현상같습니다.

 

★ params 사용 시 유의해야 할 점이 있습니다 ★

 

- params로 선언하게 되면 인자의 맨 뒤에 선언해야 합니다.

- 타입을 지정한 후 배열형태로 선언해야 합니다.

- 인자를 사용하지 않을 경우 Length가 0이 되므로 고려하여 필요하다면 예외처리를 해주어야합니다.

 

이상으로 params에 대하여 간단하게 알아보았습니다.

관련글 더보기

댓글 영역