방프리
21.05.29Chapter4. LINQ 활용 (Item 34) 본문
Item 34 : 함수를 매개변수로 사용하여 결합도를 낮추라
인터페이스를 정의하는 것보다는 델리게이트를 통해서 느슨한 결합을 만드는 것이 여러 방면에서 굉장히 좋다.
///<summary>
///인터페이스로 구현하였을 때
///</summary>
public interface IPredicate<T>
{
bool Match(T soughtObject);
}
public class List<T>
{
public void RemoveAll(IPredicate<T> match)
{
//생략
}
}
public class MyPredicate : IPredicate<int>
{
public bool Match(int target) =>
target < 100;
}
///<summary>
///델리게이트로 구현하였을 때
///</summary>
public static IEnumerable<TResult> Zip<T1, T2 TResult>(
IEnumerable<T1> first,
IEnumerable<T2> second,
Func<T1, T2, TResult> zipper)
{
using (var firstSequence = first.GetEnumerator())
{
using (var secondSequence = second.GetEnumerator())
{
while (firstSequence.MoveNext() && secondSequence.MoveNext())
{
yield return zipper(firstSequence.Current, secondSequence.Current);
}
}
}
}
함수를 매개변수로 사용하면 알고리즘 자체와 알고리즘을 적용할 타입을 분리하는 데 도움이 된다. 범용적이기는 하나
개발자 입장에서 코드를 이해하기가 어려울 수 있고, 유지보수나 런타임 시간에 오류가 발생할 수도 있다. 하지만
정확한 타입을 안다는 가정하에 이 방법을 사용한다면, 굉장한 장점으로 다가올 것이다.
'C# > Effective C#' 카테고리의 다른 글
21.08.28Chapter4. LINQ 활용 (Item 36) (0) | 2021.08.28 |
---|---|
21.06.03Chapter4. LINQ 활용 (Item 35) (0) | 2021.06.03 |
21.04.24 Chapter4. LINQ 활용 (Item 33) (0) | 2021.04.24 |
21.04.20 Chapter4. LINQ 활용 (Item 32) (0) | 2021.04.20 |
21.04.15 Chapter4. LINQ 활용 (Item 31) (0) | 2021.04.16 |
Comments