개념
- 사전적 의미로는 '포괄적인, 총칭의' 라는 뜻.
- 클래스나 메소드 등을 일반화하여 사용하는 것
- <T>라는 키워드를 사용한다.
- where 키워드로 제한을 줄 수 있다.
사용 목적
- 자료형을 정하지 않고 여러가지 타입을 한번에 사용하기 위해 사용된다.
사용 예시
public class GTestClass <T>
{
private T data; // T로 자료형을 일반화시킨다.
public T GetData() { return data; }
public void SetData(T data) { this.data = data; }
// 자료형이 제네릭이기 때문에 int가 될 수도 있고 string이 될 수도 있다.
}
GTestClass<int> gInt = new GTestClass<int>();
gInt.SetData(10);
System.Console.WriteLine( string.Format("{0}", gInt.GetData()) );
GTestClass<string> gString = new GTestClass<string>();
gString.SetData("문자열");
System.Console.WriteLine( string.Format("{0}", gString.GetData()) );
결과
10
"문자열"
위 코드 처럼 제네릭은 int, string 등 자료형을 하나로 한정하지 않고 사용할 수 있다.
만약 제네릭에 제한을 두고 싶다면 where 키워드를 사용하면 된다.
사용 예시
public class GTestClass2<T> where T : whereTestBaseClass
{
}
GTestClass2<int> gInt2 = new GTestClass2<int>();
// 위 gInt2에서 <int>는 where T : 로 선언한 whereTestBaseClass를 포함하고 있지 않기 때문에 에러가 발생
GTestClass2<whereTestClass> whereTest = new GTestClass2<whereTestClass>();
// 위와 같이 <whereTestClass>는 where T : 로 선언한 whereTestBaseClass를 포함하고 있기 때문에 정상 작동이 된다.
참고 출처
'프로그래밍 > 기본기ㆍ자료구조' 카테고리의 다른 글
람다식 (3) | 2020.05.15 |
---|---|
Dictionary (딕셔너리) (0) | 2020.05.14 |
Clean Code (클린코드) (5) | 2020.05.03 |
BackBuffer (백버퍼) (5) | 2020.05.01 |
Property Indexer (프로퍼티 인덱서) (5) | 2020.04.30 |