C# 강좌 : 제 19강 - 일반화
일반화(Generalization)
일반화(Generalization)
란 데이터 형식(Data Type)
에서 연관성이 있는 2개 이상의 개체 집합을 묶어내는 것 입니다.
데이터 형식이 다른 변수들을 출력한다라고 가정하면, 비슷하면서 다른 코드를 중복해서 작성해야 합니다.
이때 일반화를 사용하여 코드의 중복을 최소화합니다.
일반화 구조
한정자 반환형식 일반화이름<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 형식매개변수 : 제약조건
where T : struct
: T는 값 형식으로 제한where T : class
: T는 참조 형식으로 제한where T : new()
: 매개 변수가 없는 생성자로 제한where T : 기반 클래스 이름
: 기반 클래스의 파생 클래스로 제한where T : 인터페이스 이름
: 명시한 인터페이스로 제한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
, bool
은 CS0453
에러를 일으킵니다.
공유하기


댓글 남기기