[CS] 메모 13. 일반화
윤대희님의 강의 19강
<일반화>(Generalization)
일반화 : 데이터 타입에서 연광성있는 2가지 이상의 개체 집합을 묶어내는 것.
- 데이터 타입이 다른 변수를 출력해야한다면, 여러 코드를 중복해서 적어야함.
- 그런 코드중복현상을 최소화 하는 기법
일반화 구조
한정자 반환형식 일반화이름<T> (T 매개변수)
{
코드 1;
코드 2;
코드 3;
...
return 반환값
}
일반화 메서드
T
를 이용해서 서로 다른 데이터 형식의 메서드를 일반화 할 수 있음.
private void general<T>(T value) // 일반화 함수 생성
{
Console.WriteLine(value); // 일반화 T value를 print힘.
}
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/3/일반화/45.6/True
- Tip : 배열의 경우 각 원소를 출력해야함
- Tip : object는 모든변수의 최상위 단위임.
일반화 클래스
T
를 이용하여 서로 다른 데이터형식의 클래스
를 일반화할 수 있음.
class general_class<T> // 제너럴 클래스 선언
{
public T[] array; // 제너럴 타입 배열
public int size;
public general_class(int size)
{
array = new T[size]; // 제너럴 타입의 새로운 배열 생성
}
}
private void Form1_Load(object sender, EventArgs e)
{
general_class<int> list1 = new genera_class<int>(1);
general_class<string> list2 = new genera_class<string>(2);
general_class<object> list3 = new genera_class<object>(3);
list1.array[0] = 1;
list2.array[0] = "one";
list2.array[1] = "two";
list3.array[0] = 23.456;
list3.arrya[1] = "thrre";
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: 인터페이스 이름 : 명시한 인터페이스로 제한
- whrere T: U : 다른형식 매개변수 U로부터 상속받은 클래스로 제한
private void general<T>(T value) where T : struct
{
Console.WriteLine(value); // 일반화 T value를 print힘.
}
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/
- 값형식 제한으로 인해 string, bool 타입은 못씀.
Author And Source
이 문제에 관하여([CS] 메모 13. 일반화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@psh4204/CS-메모-13.-일반화저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)