라벨이 제네릭 델리게이트인 게시물 표시

C# 제네릭 델리게이트: Action·Func·Predicate 선택 기준

이미지
C# 제네릭 델리게이트가 필요한 이유와 Action, Func, Predicate의 반환값 차이를 설명합니다. 오래된 예제의 의미는 살리되 현재 기준에서 잘못 적용하기 쉬운 부분을 함께 고쳤어요. 아래 순서대로 확인하면 단순한 화면 복사보다 실제 판단에 도움이 됩니다. 제네릭 델리게이트는 같은 호출 구조를 여러 데이터 형식에 재사용하게 해줍니다. 형식만 다른 델리게이트를 반복하지 않는다 문자열을 출력하는 델리게이트와 정수를 출력하는 델리게이트가 호출 구조는 같고 형식만 다르다면 제네릭으로 묶을 수 있습니다. 형식 매개변수 덕분에 컴파일러가 인수와 반환값의 일치를 확인해요. delegate TResult Converter<TInput, TResult>(TInput value); Converter<string, int> length = text => text.Length; Console.WriteLine(length("delegate")); 반환값이 없으면 Action, 있으면 Func Action<T> 는 값을 받아 작업하지만 반환값은 없습니다. Func<T, TResult> 는 마지막 형식 매개변수가 반환 형식이에요. 조건을 검사해 bool을 돌려주는 용도에는 Predicate<T> 도 있지만, LINQ와 함께 쓸 때는 Func<T, bool> 이 더 자연스러운 경우가 많습니다. 예를 들어 화면에 메시지를 쓰는 작업은 Action, 문자열을 숫자로 바꾸는 변환은 Func, 목록에서 조건에 맞는 항목을 찾는 검사는 Predicate로 읽으면 구분이 쉽습니다. 직접 선언할 때는 의미 있는 이름을 준다 기본 제공 Action과 Func만으로 대부분의 콜백을 표현할 수 있습니다. 하지만 ref · out 매개변수가 필요하거나, 호출의 업무 의미를 형식 이름으로 드러내야 한다면 사용자 정의 델리게이트가 낫습니다. 공개 API에서는 단순한 형식보다 이름이 사...