일반화 메소드
일반화 매서드 선언 방법
한정자 반환_형식 메소드_이름<형식_매개변수> (매개변수_목록)
{
//...
}
//int 버전
void CopyArray(int[] source, int[] target)
{
for(int i = 0; i < source.Length; i++)
target[i] = sourc[i]
}
//string버전
void CopyArray(string[] source, string [] target)
{
for(int i = 0; < source.Length; i++)
target[i] = source[i];
}
이 코드에서 데이터 형식이 사용된 부분을 T기호로 치환하면서 메소드 이름 뒤에 <T>를 넣어주면 T는 형식 매개변수가 됩니다.
void CopyArray<T> (T[] source, T[] target)
{
for(int i = 0; i < source.Length; i++)
target[i] = source[i]
}
int[] source = {1,2,3,4,5};
int[] target = new int{source.Length];
CopyArray<int>(source, target);
foreach(int element in target)
Console.WriteLine(element);
일반화 클래스
일반화 클래스는 데이터 형식을 일반화한 클래스입니다.
class 클래스_이름<형식_매개변수>
{
//...
}
class Array_Int
{
private int[] array;
//...
public int GetElement(int index) {return array[index];}
}
class Array_Double
{
private double[] array;
// ...
public double GetElement(int index) {return array[index];}
}
이 두 클래스는 데이터 형식만 빼고 다른 부분이 모두 같으니 일반화 할 수 있습니다.
class Array_Generic<T>
{
private T[] array;
//...
public T GetElement(int index) {return array[index];}
그럼 이제 Array_Generic 클래스는 다음과 같이 사용 할 수 있습니다.
Array_Generic<int> intArr = new Array_Generic<int>();
Array_Generic<double> dblArr = new Arrapy_Generic<double>();
형식 매개변수 제약시키기
모든 형식에 대응할 수 있는 형식 매개변수가 필요할 때도 있지만, 종종 특정 조건을 갖춘 형식에만 대응하는 형식 매개변수가 필요할 때도 있습니다.
이때 우리는 형식 매개변수의 조건에 제약을 줄 수 있습니다.
예를 들어 MyList<T> 클래스의 형식 매개변수 T에 'MyClass'로 부터 상속 받는 형식 이어야 할것 이라는 제약을 주려면 다음과 같이 클래스 선언문의 헤더에 where절을 추가해줍니다.
class MyList<T> where T : MyClass
{
//...
}
일반화 메소드의 예도 들어 보겠습니다.
void CopyArray<T>(T[] source, T[] target) where T : struct
{
for(int i = 0; i < source.Length; i++)
target[i] = source[i];
}
where 형식 매개변수 : 제약_조건
'C#' 카테고리의 다른 글
Task (0) | 2024.11.03 |
---|---|
대리자와 이벤트 (0) | 2024.11.01 |
배열과 컬렉션 그리고 인덱서 (0) | 2024.11.01 |
프로퍼티 (3) | 2024.11.01 |
인터페이스와 추상클래스 (0) | 2024.10.31 |
댓글