c#/기타

[c#] 일반화 메소드 , 한 개 함수로 여러 타입 사용

byH 2021. 12. 27. 11:05
728x90
반응형

만약에 다음과 같이 정의된 것들을 변수로 받아 출력하는 함수를 만든다고하자.

int[] i = { 1, 2, 3 };

double[] d = { 0.1, 0.2, 0.3 };
string[] s = { "일", "이", "삼" };

 

그러면 int[]를 받는 함수  print(int[] args) , double[]를 받는 함수 print(double[] args) , string을 받는 함수 print(string[] args)를 세 개 만들어서 각 자 보내주어도 된다.

 

 private void Form1_Load(object sender, EventArgs e)
        {
            int[] i = { 1, 2, 3 };
            double[] d = { 0.1, 0.2, 0.3 };
            string[] s = { "일", "이", "삼" };

            print(i);
            print(d);
            print(s);

        }

        private void print(int[] args)
        {
            foreach (var a in args)
            {
                richTextBox1.AppendText("\n");
                richTextBox1.AppendText(a.ToString());
            }
        }

        private void print(double[] args)
        {
            foreach (var a in args)
            {
                richTextBox1.AppendText("\n");
                richTextBox1.AppendText(a.ToString());
            }
        }

        private void print(string[] args)
        {
            foreach (var a in args)
            {
                richTextBox1.AppendText("\n");
                richTextBox1.AppendText(a.ToString());
            }
        }

 

그러나 함수 안의 내용이 똑같은데 똑같은 함수를 여러번 적은 느낌이 든다.

이럴 때 사용하는 게 일반화 메소드 (제네릭 메소드이다.)

 

void print<T>(T[] args) 다음과 같이 사용하면 되는데, T 대신 다른 걸 사용하여도 된다. 

일반화 함수를 만들어둔 후 형식과 같이 전달해주면 된다. 결과는 같다. 

 private void Form1_Load(object sender, EventArgs e)
        {
            int[] i = { 1, 2, 3 };
            double[] d = { 0.1, 0.2, 0.3 };
            string[] s = { "일", "이", "삼" };

            print<int>(i);
            print<double>(d);
            print<string>(s);
            

        }

        private void print<T>(T[] args)
        {
            foreach (var a in args)
            {
           		richTextBox1.AppendText("\n");
                richTextBox1.AppendText(a.ToString());
            }
        }

728x90
반응형