본문 바로가기

웹 개발/ASP .NET

[ASP.NET MVC5] 람다식을 활용한 필터링과 간결한 코드 작성

델리게이트를 사용한 필터링


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));
}

 

람다식의 장점

  1. 간결함: 메서드 본문을 간단히 표현 가능하다.
    csharp
    코드 복사
    Func<Product, bool> categoryFilter = prod => prod.Category == "soccer";
  2. 자동 형식 추론: 매개변수의 형식을 명시하지 않아도 된다.
  3. 코드 가독성 향상: 불필요한 코드 작성 없이 핵심 로직에 집중할 수 있다.

 

정리


  • 델리게이트는 특정 조건에 따라 데이터를 필터링할 수 있지만, 매번 정의해야 해서 코드가 장황해질 수 있다.
  • 람다식은 델리게이트의 메서드 본문을 간결하게 표현하여 코드 가독성과 유지보수성을 향상시킨다.
  • ASP.NET MVC5에서 람다식을 활용하면 보다 효율적으로 데이터 필터링과 처리가 가능하다.

람다식은 특히 LINQ, 이벤트 처리, 데이터 필터링 등 다양한 상황에서 활용할 수 있는 강력한 도구다. 이를 적절히 사용하면 더욱 직관적이고 간결한 코드를 작성할 수 있다.