개발공부/C#

[Effective C#] 아이템 23 : 타입 매개변수에 대해 메서드 제약 조건을 설정하려면 델리게이트를 활용하라

개발자 찐빵이 2021. 11. 29. 00:09
728x90

인터페이스를 이용한 메서드 제약

제네릭 클래스에 대해 타입 매개변수 T가 반드시 Add() 메서드를 가져야 한다는 제약 조건을 설정할 때,

  1. Add() 메서드를 정의하는 IAdd 인터페이스를 생성한다.
  2. IAdd 인터페이스로 제약 조건을 설정한다.
  3. IAdd를 구현할 클래스를 생성한다.
  4. IAdd가 정의한 Add() 메서드를 구현한다.
  5. 제네릭 클래스의 정의를 이용하여 닫힌 제네릭 클래스를 만든다.

즉, Add() 메서드 하나를 호출하기 위해 IAdd 인터페이스를 구현한 새로운 클래스를 생성한다.

델리게이크를 이용한 메서드 제약

제약조건으로 설정하고 싶은 메서드의 원형에 부합하는 델리게이트를 작성한다.

  1. 적절한 메서드의 원형을 고안하고 이를 델리게이트 타입으로 정의한다.
  2. 델리게이트의 인스턴스를 제네릭 메서드의 매개변수로 추가한다.
  3. 람다 표현식을 인자로 전달한다.

예시 코드

public static class Example
{
    public static T Add<T>(T left, T right, Func<T, T, T> AddFunc) =>
        AddFunc(left, right);
}

특정 제네릭 클래스가 T 타입의 두 객체를 더하는 메서드를 필요로 한다고 가정할 때, 위와 같이 람다 표현식을 이용하여 Add 메서드를 구현할 수 있다.

호출 코드

int a = 6;
int b = 7;
int sum = Example.Add(a, b, (x, y) => x + y);
반응형