[25] 타입 매개변수로 인스턴스 필드를 만들 필요가 없다면 제네릭 메서드를 정의하라

다음 본문은 도서 이펙티브 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;
}

 

결론

 - 제네릭 메서드를 구현하여 타입을 컴파일러가 자동으로 찾도록 유도하는 것이 좋다. 

 

 

 

댓글

Designed by JB FACTORY