C# 프로그래밍 - 제네릭(Generic) 클래스, 메서드
- c#
- 2021. 10. 29.
C# 프로그래밍 - 제네릭(Generic) 클래스, 메서드
제네릭(Generics)을 사용하여 타입에 의존하지 않는 클래스, 메서드, 인터페이스등을 정의할수있습니다. 여러 데이터 타입에 대해 동일한 코드를 사용할 수 있어 코드 중복을 줄일수있습니다(코드 재사용성) 또 컴파일 시점에 타입 검사를 수행하고 박싱(boxing)작업에 대한 위험이 발생하지않아 런타임 오류를 줄일 수 있고(타입 안전성) 성능 향상에 기여합니다.
제네릭은<T>를 사용하여 정의합니다. <T>는 타입 매개변수로 객체 생성 및 메서드 호출 시 실제 타입으로 대체됩니다.
제네릭 클래스 예시
public class GenericClass<T>
{
private T data;
public GenericClass(T value)
{
data = value;
}
public T GetData()
{
return data;
}
}
var intInstance = new GenericClass<int>(10);
Console.WriteLine(intInstance.GetData()); // 10
var stringInstance = new GenericClass<string>("Hello");
Console.WriteLine(stringInstance.GetData()); // Hello
제네릭 메서드 예시1
public class GenericMethodExample
{
public T GetDefault<T>()
{
return default(T); // 기본값 반환
}
}
var example = new GenericMethodExample();
Console.WriteLine(example.GetDefault<int>()); // 0
Console.WriteLine(example.GetDefault<string>()); // null
제네릭 메서드 예시2
public class Example
{
public T GetValue<T>(T value)
{
return value;
}
}
class Program
{
static void Main(string[] args)
{
Example example = new Example();
int intValue = example.GetValue(10);
string stringValue = example.GetValue("Hello, Generics!");
Console.WriteLine(intValue); //10
Console.WriteLine(stringValue); //Hello, Generics!
}
}
컴파일 시점 타입 검사
C# 컴파일러는 코드가 실행되기 전에 변수가 어떤 타입인지 확인합니다. 예를 들어 정수형 변수에 문자열 값을 할당하려고 하면 컴파일러는 오류를 발생시킵니다. 잘못된 타입 사용이 사전에 차단됩니다.
int number = "Hello"; // 컴파일 오류 발생
런타임 오류 감소
프로그램이 실행되는 동안 발생할 수 있는 오류로 일반적으로 프로그램의 동작에 영향을 미칩니다. 타입 안전성이 보장되지 않으면 잘못된 캐스팅 또는 boxing 작업에 의해 오류가 발생할 수 있습니다.
object obj = "Hello";
int number = (int)obj; // InvalidCastException 런타임 오류 발생
제네릭을 사용하면 메서드의 매개변수와 반환 타입이 타입 매개변수에 의해 결정되므로 잘못된 타입을 사용할 가능성이 줄어듭니다.
https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/generics/
'c#' 카테고리의 다른 글
C# 프로그래밍 - 접근제한자(public, private, protected, internal, 기타) (0) | 2022.04.16 |
---|---|
C# 프로그래밍 - Regex.Split 메서드를 사용한 문자열 분할 (0) | 2022.03.26 |
C# 프로그래밍 - 배열(선언, 초기화, 크기지정, 자주 사용하는 메서드) (0) | 2021.07.05 |
C#, 닷넷 프레임워크(.NET Framework) (0) | 2021.05.05 |
C# 프로그래밍 - 문자열(String) 이스케이프 시퀀스, 축자 텍스트@ (0) | 2021.01.07 |