다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.
무작정 제네릭 클래스를 만드는 것보다는
일반 클래스 내의 제네릭 메서드를 작성하는 편이 훨씬 좋은 경우가 있다.
제네릭 클래스는 클래스 전체를 하나의 제약조건으로 감싸게 되지만
일반 클래스 내의 제네릭 메서드는 각 메서드마다 개별적인 제약 조건을 설정할 수 있다.
제네릭 클래스 내의 유틸 함수
- 사용할때 <int>를 매번 명시해야되는 귀찮음이 있다.
public class MyTest
{
public void MyMethod()
{
int a = 0;
int b = 2;
var result = Utils<int>.Max(a, b);
}
}
public static class Utils<T>
{
public static T Max(T left, T right)
=> Comparer<T>.Default.Compare(left, right) < 0 ? right : left;
}
일반 클래스 내의 유틸 함수
- 더 이상 <int>를 명시하지 않아도 정상 작동한다.
public class MyTest
{
public void MyMethod()
{
int a = 0;
int b = 2;
var result2 = Utils.Max(a, b);
}
}
public static class Utils
{
public static T Max<T>(T left, T right)
=> Comparer<T>.Default.Compare(left, right) < 0 ? right : left;
}
결론
- 제네릭 메서드를 구현하여 타입을 컴파일러가 자동으로 찾도록 유도하는 것이 좋다.
'🌍 C# Study > 이펙티브 C#' 카테고리의 다른 글
[27] 인터페이스는 간략히 정의하고 기능의 확장은 확장 메서드를 사용하라 (0) | 2021.04.28 |
---|---|
[26] 제네릭 인터페이스와 논제네릭 인터페이스를 함께 구현하라 (0) | 2021.04.28 |
[24] 베이스 클래스나 인터페이스에 대해서 제네릭을 특화하지 말라 (0) | 2021.04.27 |
[23] 타입 매개변수에 대해 메서드 제약 조건을 설정하려면 델리게이트를 활용하라 (0) | 2021.04.27 |
[22] 공변성과 반공변성을 지원하라 (0) | 2021.04.27 |