728x90
728x90
참조
https://learn.microsoft.com/ko-kr/dotnet/csharp/fundamentals/types/generics
제네릭 (Generics)
- 특정 데이터 형식에 의존하지 않는 클래스/메서드를 정의할 수 있음
→ 다양한 데이터 형식 처리
- 하나 이상의 형식 매개변수를 사용함
→ 일반적으로 T, U 등으로 표기됨
- 동일한 코드에서 여러 데이터 형식을 처리할 수 있음
→ 코드 중복 감소 / 유지 보수성 UP
▶ 제네릭의 장점을 보여주는 예시
# 제네릭을 사용하지 않을 때
class IntList {
public IList<int> list { get; set; } = new List<int>();
public void Add(int value) {
list.Add(value);
}
}
class StringList
{
public IList<string> list { get; set; } = new List<string>();
public void Add(string value)
{
list.Add(value);
}
}
// ----
var intList = new intList();
var stringList = new StringList();
# 제네릭을 사용할 때
class GenericList<T>
{
public IList<T> list { get; set; } = new List<T>();
public void Add(T value)
{
list.Add(value);
}
}
// -----
var intList = new GenericList<int>();
var stringList = new GenericList<String>();
- 하나의 클래스로 여러 자료형의 요소를 담는 리스트 객체를 구현할 수 있음
▶ 제네릭 형식 매개변수에 대한 제약 조건 지정하기
// IComparable 자료형만 매개변수에 넣을 수 있도록 제한
public class GenericClass<T> where T : IComparable
// 매개변수가 없는 기본 생성자만 갖는 자료형만 매개변수에 넣을 수 있도록 제한
public class GenericClass<T> where T : new()
// 여러 제약 조건을 동시에 지정
public class GenericClass<T> where T : BaseClass, IComparable, new()
320x100
반응형
'C#' 카테고리의 다른 글
[C#/dotnet] 페이지 구조 - 마스터 페이지 & 콘텐츠 페이지 (1) | 2024.10.24 |
---|---|
[C#/dotnet] 페이지 수명 주기 (3) | 2024.10.24 |
[C#/dotnet] LINQ (Language-Integrated Query) (0) | 2024.10.23 |
[C#/dotnet] 일반적인 C# 코드 규칙 (2) | 2024.10.23 |
[C#/dotnet] 식별자 명명 규칙 (0) | 2024.10.18 |