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

C# Generalization

C# 강좌 : 제 19강 - 일반화
[ C# ] - 윤대희

일반화(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 에러를 일으킵니다.



Book Image

개정판이 출간됐습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍 (개정판)

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • K-means, KNN, SVM 등의 머신러닝 알고리즘 적용 방법
  • 카페(Caffe), 다크넷(Darknet), 텐서플로 모델을 활용한 딥러닝 모듈 적용 방법
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • 텐서플로와 Python OpenCV4를 활용한 프로젝트
  • 윤대희 저 | 위키북스

    [yes24 바로가기] [알라딘 바로가기] [교보문고 바로가기]

    후원하기


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