■ 일반화(Generalization) :
특수한 개념으로부터 공통된 개념을 찾아 묶는 것
■ 일반화 프로그래밍(Generic Programming) :
- 데이터 형식(Data Type) 일반화를 이용한 프로그래밍
- 한 가지 코드로 다양한 데이터 형식(Data Type) 활용
■ 일반화 메서드(Generic Method) :
- 데이터 형식(Data Type)을 일반화한 메서드
- 형식 매개변수 < >를 사용하여 작성
■ 일반화 클래스(Generic Class) :
- 데이터 형식(Data Type)을 일반화한 클래스
■ 형식 매개 변수 제약 :
- 특정 조건을 갖추도록 제한하는 기능
제약 | 설명 |
where T : struct | T는 값 형식 |
where T : class | T는 참조 형식 |
where T : new() | T는 매개 변수가 없는 생성자가 있어야함 |
where T : 기반_클래스_이름 | T는 명시된 클래스를 상속 받은 클래스 |
where T : 인터페이스_이름 | T는 명시된 인터페이스를 상속 받은 클래스 |
where T : U | T는 형식 매개 변수 U로부터 상속 받은 클래스 |
■ Example
using System;
namespace GenericExample
{
class Generic<T>
{
public T[] array;
public T data;
public Generic(int size)
{
array = new T[size];
}
}
class Program
{
static void Main(string[] args)
{
// Generic Method Example
GenericExample.Program generic = new Program();
generic.GenericMethod<int>(100);
generic.GenericMethod<double>(3.14);
generic.GenericMethod<string>("Memoo");
Console.WriteLine();
// Generic Class Example
Generic<int> generic_int = new Generic<int>(3);
generic_int.data = 999;
for (int i = 0; i < generic_int.array.Length; i++)
generic_int.array[i] = i*10;
foreach(var item in generic_int.array)
Console.WriteLine($"[Generic Class Example] : data = {generic_int.data}, item = {item}");
Console.WriteLine();
// 제약조건 Example
generic.GenericWhereMethod<int>(1000);
//generic.GenericWhereMethod<string>("memoo"); // string은 참조 형식(class)이기 때문에 Error 발생
}
public void GenericMethod<T>(T value)
{
Console.WriteLine($"[GenericMethod] : value = {value}, value.type = {value.GetType()}");
}
public void GenericWhereMethod <T>(T value) where T : struct
{
Console.WriteLine($"[GenericWhereMethod] : value = {value}, value.type = {value.GetType()}");
}
}
}
'개인공부 > C#' 카테고리의 다른 글
[C#] 대리자(Delegate) (0) | 2022.10.13 |
---|---|
[C#] 예외(Exception) (0) | 2022.10.07 |
[C#] 인덱서(Indexer), IEnumerable, IEnumerator (0) | 2022.09.26 |
[C#] 컬렉션(Collection) (0) | 2022.09.23 |
[C#] 배열(Array) (0) | 2022.09.22 |