델리게이트를 사용한 필터링
Product 개체를 대상으로 델리게이트를 수행하여 원하는 방식으로 필터링할 수 있다. 다음은 기본 델리게이트를 사용한 필터링 예제다.
확장 메서드로 필터링 구현
Func<Product, bool> 타입의 델리게이트를 받아 필터링 조건을 적용하는 확장 메서드 Filter를 작성했다.
public static IEnumerable<Product> Filter(
this IEnumerable<Product> productEnum, Func<Product, bool> selectorParam
) {
foreach (Product product in productEnum) {
if (selectorParam(product)) {
yield return product;
}
}
}
이 메서드는 조건을 만족하는 Product만 반환한다.
델리게이트를 활용한 필터링
다음은 Filter 메서드를 사용하여 카테고리가 "soccer"인 상품만 필터링하는 예제다.
public ViewResult UseExtensionEnumerable() {
IEnumerable<Product> products = new ShoppingCart {
Products = new List<Product> {
new Product { Name = "kayak", Category = "Watersports", Price = 275M },
new Product { Name = "Lifejacket", Category = "Watersports", Price = 48.95M },
new Product { Name = "Soccer ball", Category = "soccer", Price = 19.50M },
new Product { Name = "Corner flag", Category = "soccer", Price = 34.95M },
}
};
Func<Product, bool> categoryFilter = delegate (Product product) {
return product.Category == "soccer";
};
decimal total = 0;
foreach (Product product in products.Filter(categoryFilter)) {
total += product.Price;
}
return View("Result", (object)String.Format("Cart Total: {0}", total));
}
델리게이트 방식의 단점
- 조건을 만족하는지 확인하는 로직을 매번 정의해야 한다.
- 코드가 장황하고 반복적이다.
람다식을 활용한 필터링
람다식은 델리게이트 메서드 본문을 간결하게 표현할 수 있는 방식이다. 다음은 델리게이트 대신 람다식을 사용한 동일한 예제다.
public ViewResult UseExtensionEnumerable() {
IEnumerable<Product> products = new ShoppingCart {
Products = new List<Product> {
new Product { Name = "kayak", Category = "Watersports", Price = 275M },
new Product { Name = "Lifejacket", Category = "Watersports", Price = 48.95M },
new Product { Name = "Soccer ball", Category = "soccer", Price = 19.50M },
new Product { Name = "Corner flag", Category = "soccer", Price = 34.95M },
}
};
Func<Product, bool> categoryFilter = prod => prod.Category == "soccer";
decimal total = 0;
foreach (Product product in products.Filter(categoryFilter)) {
total += product.Price;
}
return View("Result", (object)String.Format("Cart Total: {0}", total));
}
람다식의 장점
- 간결함: 메서드 본문을 간단히 표현 가능하다.
csharp코드 복사Func<Product, bool> categoryFilter = prod => prod.Category == "soccer";
- 자동 형식 추론: 매개변수의 형식을 명시하지 않아도 된다.
- 코드 가독성 향상: 불필요한 코드 작성 없이 핵심 로직에 집중할 수 있다.
정리
- 델리게이트는 특정 조건에 따라 데이터를 필터링할 수 있지만, 매번 정의해야 해서 코드가 장황해질 수 있다.
- 람다식은 델리게이트의 메서드 본문을 간결하게 표현하여 코드 가독성과 유지보수성을 향상시킨다.
- ASP.NET MVC5에서 람다식을 활용하면 보다 효율적으로 데이터 필터링과 처리가 가능하다.
람다식은 특히 LINQ, 이벤트 처리, 데이터 필터링 등 다양한 상황에서 활용할 수 있는 강력한 도구다. 이를 적절히 사용하면 더욱 직관적이고 간결한 코드를 작성할 수 있다.
'웹 개발 > ASP .NET' 카테고리의 다른 글
[ASP.NET MVC5] Ninject로 의존성 주입(DI) 구현하기 (0) | 2024.11.26 |
---|---|
[ASP.NET MVC5] 확장 메서드 (0) | 2024.11.25 |
[ASP.NET MVC5] 자동 구현 속성 (0) | 2024.11.25 |
[ASP.NET MVC5] MVC 패턴과 샘플 프로젝트 (0) | 2024.11.25 |
[ASP.NET MVC5] 동적 출력 (0) | 2024.11.25 |