C# 강좌 : 제 19강 - 일반화

   

일반화 (Generalization)


일반화 (Generalization) 데이터 형식(Data Type)연관성이 있는 2개 이상의 개체 집합을 묶어내는 것 입니다. 데이터 형식이 다른 변수들을 출력한다 가정하면, 비슷하면서 다른 코드를 여러개 작성해야 합니다. 이를 줄이기 위하여 사용합니다.

1

한정자 반환형식 일반화이름<T> (T 매개변수)
{
    코드 1;
    코드 2;
    코드 3;
    ...
    return 반환값
}


일반화 메소드 (Generalization Method)


T를 이용하여 서로 다른 데이터 형식의 메소드를 일반화할 수 있습니다.

private void general<T>(T value)
{
    Console.WriteLine(value);
}

private void Form1_Load(object sender, EventArgs e)
{
    int[] one = { 1, 2, 3 };
    string two = "일반화";
    double three = 45.6;
    bool four = true;

    foreach (int num in one) general<int>(num);
    general<string>(two);
    general<double>(three);
    general<object>(four);
}

실제 출력 값 : 1 / 2 / 3 / 일반화 / 45.6 / True

  • Tip : 배열의 경우 각각의 원소를 출력해야합니다.
  • Tip : object는 모든 변수의 최상위 변수입니다.


일반화 클래스 (Generalization Class)


T를 이용하여 서로 다른 데이터 형식의 클래스를 일반화할 수 있습니다.

class general<T>
{
    public T[] array;
    public int size;

    public general(int size)
    {
        array = new T[size];
    }
}

private void Form1_Load(object sender, EventArgs e)
{
    general<int> list1 = new general<int>(1);
    general<string> list2 = new general<string>(2);
    general<object> list3 = new general<object>(3);

    list1.array[0] = 1;

    list2.array[0] = "one";
    list2.array[1] = "two";

    list3.array[0] = 23.456;
    list3.array[1] = "three";
    list3.array[2] = true;

    Console.WriteLine(list1.array[0]);

    Console.WriteLine(list2.array[0]);
    Console.WriteLine(list2.array[1]);

    Console.WriteLine(list3.array[0]);
    Console.WriteLine(list3.array[1]);
    Console.WriteLine(list3.array[2]);
}

실제 출력 값 : 1 / one / two / 23.456 / three / True


제약조건 where : T


모든 형식에 대하여 대응할 수 있지만, 특정 조건에만 만족하는 경우에만 사용 할 수 있게 제한할 수 있습니다.

where 형식매개변수 : 제약조건
  1. where T : struct : T는 값 형식으로 제한
  2. where T : class : T는 참조 형식으로 제한
  3. where T : new() : 매개 변수가 없는 생성자로 제한
  4. where T : 기반 클래스 이름 : 기반 클래스의 파생 클래스로 제한
  5. where T : 인터페이스 이름 : 명시한 인터페이스로 제한
  6. where T : U : 다른 형식 매개 변수 U로부터 상속받은 클래스로 제한
private void general<T>(T value) where T : struct
{
    Console.WriteLine(value);
}

private void Form1_Load(object sender, EventArgs e)
{
    int[] one = { 1, 2, 3 };
    string two = "일반화";
    double three = 45.6;
    bool four = true;

    foreach (int num in one) general<int>(num);
    //general<string>(two);
    general<double>(three);
    //general<object>(four);
}

실제 출력 값 : 1 / 2 / 3 / 45.6

값 형식으로 제한하여 배열double만 출력이 가능합니다. string, boolCS0453 에러를 일으킵니다.



도움이 되셨다면 광고 클릭 부탁드립니다.

⤧  Next post C# 강좌 : 제 20강 - 예외 ⤧  Previous post C# 강좌 : 제 18강 - 컬렉션