2021
04.27

다음 본문은 도서 이펙티브 C# (빌 와그너)에서 나오는 주제를 다룹니다.

 

 

 

C#에서 제약조건을 설정하는건 한계가 많은 것 처럼 보인다.

우선 제약 조건을 위해 인터페이스를 구현하는 방식을 생각해 볼 수 있다.

 

Add() 메서드를 정의하기 위한 예시

 - Add() 메서드를 정의하는 IAdd<T> 인터페이스를 생성

 - 이 인터페이스를 제약 조건으로 설정

 - IAdd<T>를 구현할 클래스를 생성

 - IAdd<T>가 정의한 Add()메서드를 구현

 

꽤 작업량이 많아지며, 클래스의 기본적인 구조를 해친다.

 

제약 조건으로 델리게이트 사용하기

제약조건으로 델리게이트를 작성하면 추가적인 작업없이 해결 가능하다.

 

특정 제네릭 클래스가 T타입의 두 객체를 더하는 메서드를 필요로 하는 경우

System.Func<T1, T2, TOutput> 델리게이트를 사용하면 필요한 원형의 델리게이트를 얻을 수 있다.

1) 적절한 메서드의 원형을 고안하고 이를 델리게이트 타입으로 정의한다.
2) 델리게이트의 인스턴스를 제네릭 메서드의 매개변수로 추가한다.
3) 람다 표현식을 인자로 전달한다.
public static class MyClass
{
    public static T Add<T>(T left, T right, Func<T, T, T> AddFunc)
        => AddFunc(left, right);
}
int a = 6;
int b = 7;
int sum = Example.Add(a, b, (x, y) => x + y);

 

결론

 - 제약 조건을 설정하기 위해 인터페이스를 사용하기 쉽지 않다면 델리게이트를 이요하라

 

 

 

COMMENT