개발공부/C#

[Effective C#] 아이템 32 : Action, Predicate, Function과 순회 방식을 분리하라

개발자 찐빵이 2021. 12. 8. 22:12
728x90

이터레이터 메서드 유형

  • 시퀀스 내 개별 항목을 이용하여 작업을 수행하는 유형
  • 시퀀스의 순회 방식에 변경을 주는 유형

익명 델리게이트 패턴

function

반환 값이 있는 함수를 전달하는 델리게이트

predicate

시퀀스 내의 항목이 조건에 부합하는지를 Boolean으로 반환하는 함수.

action

컬렉션 내의 개별 요소에 대해 수행할 작업을 전달하는 델리게이트.

예시

namespace System
{
    public delegate bool Predicate<T>(T obj);
    public delegate void Action<T>(T obj);
    public delegate TResult Func<T, TResult>(T arg);
}

시퀀스에서 N번째 요소만 반환하는 코드

public static IEnumerable<T> EveryNthItem<T>(
    IEnumerable<T> sequence, int period)
    {
        var count = 0;

        foreach (T item in sequence)
            if(++count % period == 0)
                yield return item;
    }

시퀀스에서 일부 항목만 뽑아내고 싶은 경우

Func <> 델리게이트를 이터레이션 패턴과 결합해서 사용한다.

public static IEnumerable<T> Select<T>(
    IEnumerable<T> sequence, Func<T, T> method)
    {
        foreach(T element in sequence)
            yield return method(element);
    }

결론

function을 이용하면 시퀀스 개별 요소에 대해 적용할 다양한 작업을 구현할 수 있다.
action을 이용하면 시퀀스 일부 요소를 가져와서 수행할 작업을 쉽게 구현할 수 있다.

반응형