독개

[C#] 제네릭 함수, 클래스

by #독개#
제네릭은 자료형을 매개변수와 같은 방식으로 받아올 수 있다

요즘의 대부분 라이브러리는 제네릭을 모두 사용한다.

직접 제네릭 함수나, 클래스를 만들어서 사용하려고는 하지말자 고려해야 할 경우의 수가 너무 많다

 

필요성

우리가 매개변수에 미리 지정해둔 자료형을 인자로 받아오는데,

Print(int a) , Print(double a), Print(string a), Print(Student a) 이렇게 모든 자료형 마다 함수를

지정해줄 수 없다. 그래서 매개변수의 자료형마저 인자로 받아오면 한줄이면 된다

  • Print<T>(T a)
  • Print<T,U>(T a, U b)

여러개의 자료형을 받아오는 것도 가능하다

 


제네릭 함수

        public class Generic
    {
        public void print<T>(T a)		//제네릭메서드 정의
        {
            Console.WriteLine($"{a}");
        }
    }
        static public void Main(string[] args)
        {
            Generic generic = new Generic();
            generic.print<int>(1);                  //출력: 1
            generic.print<string>("Hello");         //출력: Hello
            //컴파일러가 인자를 보고 자동으로 제네릭 선언을 해줌
            generic.print(1);                       //출력: 1
            generic.print("Hello");                 //출력: Hello
        }

 

제네릭 클래스

    public class Generic<T>				//제네릭클래스 정의
    {
        public void print(T a)
        {
            Console.WriteLine($"{a}");
        }
    }
        static public void Main(string[] args)
        {
            Generic<int> generic = new Generic<int>();
            generic.print(1);        //출력: 1
            //컴파일러가 인자를 보고 자동으로 제네릭 선언을 해줌
            generic.print(1);        //출력: 1
        }

    //public class Generic<T> where T : class //T는 Class만 받겠다
    //public class Generic<T> where T : Car //T는 Car를 상속 받은 클래스만 받겠다
    //public class Generic<T> where T : IMachinable //T는 IMachinable인터페이스를 구현한 것만 받겠다.
    public class Generic<T, U> //자료형 T와 U두개를 받겠다
    {
        public void print(T a, U b)
        {
            Console.WriteLine($"{a} {b}");
        }
    }

 

'🔥 프로그래밍 학습 > C#' 카테고리의 다른 글

[C#] System.String  (0) 2022.11.29
[C#] Delegate 델리게이트  (0) 2022.11.28
[C#] 구조체 Struct  (0) 2022.11.28
[C#] 인터페이스 INTERFACE , Loosely Coupling  (0) 2022.11.28
[C#] 추상 클래스 Abstract  (0) 2022.11.28

블로그의 정보

독한 개발자

#독개#

활동하기