제네릭(Generic)

정영훈·2022년 11월 13일
0

C#프로그래밍

목록 보기
24/29

제네릭

제네릭은 클래스를 선언할 때 int, float과 같은 데이터 타입을 정하지 않고, 데이터 타입을 형식 매개변수(Type Parameter)로 받아들이도록한다.

  • 제네릭은 클래스, 인터페이스, 매서드 등에 < T >와 같은 파라미터를 붙여 구현한다.
  • 제네릭으로 선언된 클래스는 인스턴스를 생성할 때 타입을 명시한다.
class MyData<T>
{
    T data;
    public MyData() { }
    public MyData(T data)
    {
        this.data = data;
    }
    public T Data { get { return data; } set { data = value; } }
}
class Program
{
    static void Main(string[] args)
    {
        MyData<int> myData = new MyData<int>();   
        MyData<float> myData2 = new MyData<float>(3.14f);
        MyData<string> myData3 = new MyData<string>();
        myData.Data = 10;
        myData3.Data = "hello, world";
        Console.WriteLine(myData.Data);
        Console.WriteLine(myData2.Data);
        Console.WriteLine(myData3.Data);
    }
}

🙄두개 이상의 제네릭을 사용하는 클래스

  • 제네릭을 두개 이상 지정할 때는 쉼표를 사용한다.
class MyData<T, U>
{
    T key;
    U value;
    public MyData() { }
    public MyData(T key, U value )
    {
        this.key = key;
        this.value = value;
    }
    public T Key { get { return key; } set { key = value; } }
    public U Value { get { return value; } set { this.value = value; } }
}
class Program
{
    static void Main(string[] args)
    {
        MyData<int,string> myData = new MyData<int,string>(1,"kim");   
        MyData<int,string> myData2 = new MyData<int,string>(2,"jeong");   
        MyData<int,string> myData3 = new MyData<int,string>(3,"choi");

        Console.WriteLine($"key : {myData.Key} value : {myData.Value}");
        Console.WriteLine($"key : {myData2.Key} value : {myData2.Value}");
        Console.WriteLine($"key : {myData3.Key} value : {myData3.Value}");
    }
}

제네릭 제한

  • 제네릭에 자료형을 제한할 수 있다.
class MyData<T, U> 
    where T : class 
    where U : struct
{
    T key;
    U value;
    public MyData() { }
    public MyData(T key, U value )
    {
        this.key = key;
        this.value = value;
    }
    public T Key { get { return key; } set { key = value; } }
    public U Value { get { return value; } set { this.value = value; } }
}
class Program
{
    static void Main(string[] args)
    {
        MyData<int,string> myData = new MyData<int,string>(1,"kim"); //오류발생  

        Console.WriteLine($"key : {myData.Key} value : {myData.Value}");
    }
}
profile
경북소프트웨어고등학교 정보교사

0개의 댓글