C#

프로그래밍

Barbarian developer 2024. 11. 1.

일반화 메소드

 

일반화 매서드 선언 방법

한정자 반환_형식 메소드_이름<형식_매개변수> (매개변수_목록)
{
	//...
}

 

//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

댓글