방프리
21.03.14 Chapter3. 제네릭 활용 (Item 23) 본문
Item 23 : 타입 매개변수에 대해 메서드 제약 조건을 설정하려면 델리게이트를 활용하라.
특정 행위를 하는 클래스를 생성할 때 메서드를 이용하기보다는 델리게이트로 구현하는 방법이 더
효율적인 경우가 있다. 예로 캐릭터들의 이동이라는 함수를 만들 때 모든 캐릭터들은 이동을 하기 때문에
IMove라는 인터페이스를 만든 후 구현하는 것이 보편적이다. 하지만 Move()라는 메서드를 호출하기 위해
IMove 인터페이스를 만들고 그것을 상속하고... 작업량이 굉장히 많아진다.
하지만 이 메서드를 생성하는 방식 대신에 델리게이트를 이용한다면 굳이 인터페이스를 생성하지 않고
불필요한 작업량을 줄일 수 있다 (= 코드 양을 줄일 수 있다.)
public static class ReplaceInterface
{
public static T Add<T>(T left, T right, Func<T, T, T> AddFunc) =>
AddFunc(left, right);
public static T AddFunc(T left, T right)
{
return left + right;
}
}
//when use delegate
void Main()
{
int aValue = 6;
int bValue = 7;
int sum = ReplaceInterface.Add(a, b, (x, y) => x + y);
}
특정 매개변수를 받는 생성자 시퀸스 함수를 호출할 때에도, 타입 제약조건으로 '매개변수가 있는' 생성자를 설정할 수
없는데 마찬가지로 델리게이트를 사용하면 제약을 둘 수 있다.
이럴 경우 여러 가지 타입을 다 받을 수 있게 되는데, 인터페이스 구현시 예상으로 들어올 타입에 대한 오버라이드 함수
구현을 모두 해주어야 한다.
'C# > Effective C#' 카테고리의 다른 글
21.03.28 Chapter3. 제네릭 활용 (Item 25) (0) | 2021.03.28 |
---|---|
21.03.27 Chapter3. 제네릭 활용 (Item 24) (0) | 2021.03.27 |
21.03.07 Chapter3. 제네릭 활용 (Item 22) (0) | 2021.03.07 |
21.02.07 Chapter3. 제네릭 활용 (Item 21) (0) | 2021.02.07 |
20.10.26 Chapter3. 제네릭 활용 (Item 20) (0) | 2020.10.26 |
Comments