Func<int, int>
Func<int, string>
Func<string, string>
Func<int, bool>
Func<string>
.
.
.
실무에서 정말 많이 쓰이는 패턴들 예제로 보여드리겠습니다.
이걸 알면 C#의 함수형에 대해 제대로 이해했다고 생각하시면 됩니다.
1. Func 을 리스트에 적용하기 (데이터 변형, 조건 필터링)
예제 : 숫자 리스트에서 짝수만 2배로 변환
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
// Func 사용: int를 받아 int를 반환하는 함수
Func<int, int> doubleIfEven = n => (n % 2 == 0) ? n * 2 : n;
// Select를 통해 변환
var result = numbers.Select(doubleIfEven);
foreach (var n in result)
Console.WriteLine(n); // 출력: 1, 4, 3, 8, 5
2. Func 을 조건 함수로 사용하기 (동적 필터)
Func<int, bool> isOdd = n => n % 2 != 0;
var oddNumbers = numbers.Where(isOdd);
foreach (var n in oddNumbers)
Console.WriteLine(n); // 출력: 1, 3, 5
==> 이렇게 Func<T, bool>은 필터 조건으로 자주 사용됩니다.
3. Func 을 버튼 이벤트처럼 사용하기
예제 : 버튼 클릭 시 실행할 동작을 함수로 전달
// 가상의 버튼 클릭 핸들러 시뮬레이션
void OnButtonClick(Func<string> getMessage)
{
Console.WriteLine("버튼 클릭됨");
Console.WriteLine("메시지: " + getMessage());
}
// 함수 정의 없이 바로 람다로 전달
OnButtonClick(() => "안녕하세요, 김희선입니다.");
결과
버튼 클릭됨
메시지: 안녕하세요, 김희선입니다.
3. Func 을 파라미터로 전달해서 동작을 유연하게
void ProcessData(int[] data, Func<int, bool> condition)
{
foreach (var item in data)
{
if (condition(item))
Console.WriteLine("조건에 맞음: " + item);
}
}
int[] arr = { 10, 15, 20, 25 };
// 20보다 큰 값만 출력
ProcessData(arr, n => n > 20);
==> 이 패턴은 전략 패턴이나 필터링 유틸리티처럼 쓸 수 있습니다.
※ 요약
Select() | 데이터를 변환하는 함수 |
Where() | 조건 필터 함수 |
버튼 이벤트 | 실행 시 사용할 함수 전달 |
사용자 정의 메서드 | 유연한 조건, 계산 로직 전달 가능 |
개발은 많이 보고 많이 짜봐야 하는 듯 합니다.
업무나 공부에 도움되시길 바랍니다.
^^
'IT' 카테고리의 다른 글
C# SWICH 문 예제 (0) | 2025.04.02 |
---|---|
C# 델리게이트 이벤트핸들러 사용 예제 (0) | 2025.03.28 |
C# 델리게이트 이해 및 예제 (0) | 2025.03.28 |
C# Clone() 함수 사용법과 예제 (0) | 2025.03.25 |
C# foreach 와 for 문 LINQ 사용법 (2) | 2025.03.25 |