IMCAT.DEV
로그인 가입
C# 중급 함수형

C# 람다식과 익명 메서드

C# 람다식과 익명 메서드 — 중급

람다식과 익명 메서드

1. 도입 (왜 배워야 하는가)

람다식과 익명 메서드는 C# 프로그래밍에서 매우 중요한 기능입니다. 이 기능들은 코드의 가독성을 높이고, 복잡한 로직을 간결하게 표현할 수 있도록 도와줍니다. 특히, LINQ(언어 통합 쿼리)와 함께 사용할 때 큰 힘을 발휘합니다.

이들을 모르면, 코드가 장황해지고 복잡해져서 유지보수하기 어려운 상황이 발생할 수 있으며, 특히 데이터를 필터링하거나 변환할 때 여러 줄로 나누어 작성해야 하는 불편함이 생깁니다. 따라서 람다식과 익명 메서드를 잘 활용하는 것은 효율적인 프로그래밍의 기본입니다.

2. 핵심 개념 설명

람다식

람다식은 익명 메서드의 간결한 표현으로, 함수를 간단하게 정의할 수 있는 방법입니다. 예를 들어, 요리 레시피에서 특정 재료를 사용하는 방법을 명시하는 것처럼, 람다식은 코드에서 특정 동작을 간단하게 정의합니다.

익명 메서드

익명 메서드는 이름이 없는 메서드로, 필요할 때 즉석에서 정의하여 사용할 수 있습니다. 이는 마치 요리에서 특정 요리를 만들기 위해 필요한 조리법을 그때그때 작성하는 것과 같습니다.

용어설명
람다식간결하게 함수를 표현하는 방법
익명 메서드이름이 없는 메서드를 즉석에서 정의하는 방식

3. 기본 코드 예제

람다식 사용 예제

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
        var evenNumbers = numbers.Where(n => n % 2 == 0).ToList(); // 람다식 사용

        foreach (var number in evenNumbers)
        {
            Console.WriteLine(number); // 결과 출력
        }
    }
}

실행 결과:

2
4
  • List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; - 정수 리스트를 생성합니다.
  • var evenNumbers = numbers.Where(n => n % 2 == 0).ToList(); - 람다식을 사용하여 짝수를 필터링합니다.
  • foreach (var number in evenNumbers) - 필터링된 짝수 리스트를 반복합니다.
  • Console.WriteLine(number); - 짝수 번호를 출력합니다.
  • 익명 메서드 사용 예제

    using System;
    
    class Program
    {
        delegate int MathOperation(int x, int y);
        
        static void Main()
        {
            MathOperation add = delegate (int x, int y) { return x + y; }; // 익명 메서드 사용
            Console.WriteLine(add(5, 3)); // 결과 출력
        }
    }

    실행 결과:

    8
  • delegate int MathOperation(int x, int y); - 두 정수를 받아서 정수를 반환하는 델리게이트를 정의합니다.
  • MathOperation add = delegate (int x, int y) { return x + y; }; - 익명 메서드를 사용하여 덧셈을 정의합니다.
  • Console.WriteLine(add(5, 3)); - 익명 메서드를 호출하여 결과를 출력합니다.
  • 4. 실전 활용 예제

    예제 1: 쇼핑몰에서 장바구니에 담긴 상품 필터링

    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    class Product
    {
        public string Name { get; set; }
        public double Price { get; set; }
    }
    
    class Program
    {
        static void Main()
        {
            List<Product> cart = new List<Product>
            {
                new Product { Name = "상품A", Price = 10000 },
                new Product { Name = "상품B", Price = 20000 },
                new Product { Name = "상품C", Price = 30000 }
            };
    
            var expensiveProducts = cart.Where(p => p.Price > 15000).ToList(); // 15000원 초과 상품 필터링
            foreach (var product in expensiveProducts)
            {
                Console.WriteLine(product.Name); // 상품 이름 출력
            }
        }
    }

    상황 설명: 쇼핑몰의 장바구니에서 15,000원 이상의 상품을 쉽게 필터링하여 고객에게 보여줄 수 있습니다.

    예제 2: 이벤트 핸들러에서 익명 메서드 사용

    using System;
    
    class Program
    {
        static void Main()
        {
            Action<string> greet = delegate (string name)
            {
                Console.WriteLine($"안녕하세요, {name}님!");
            };
    
            greet("홍길동"); // 결과 출력
        }
    }

    상황 설명: 이벤트 핸들러에서 특정 동작을 정의할 때, 익명 메서드를 사용하여 간편하게 구현할 수 있습니다.

    5. 흔한 실수와 주의사항

    실수 1: 람다식의 매개변수 타입 생략

    // 잘못된 코드
    var evenNumbers = numbers.Where(n => n % 2 == 0); // 타입을 명시하지 않음
  • 주의사항: 매개변수의 타입을 명시하는 것이 좋습니다. 이 경우 C#이 타입을 추론해야 하므로 혼동을 일으킬 수 있습니다.
  • 실수 2: 익명 메서드의 반환 타입 누락

    // 잘못된 코드
    MathOperation add = delegate (int x, int y) { x + y; }; // 반환문 없이 작성
  • 주의사항: 반환값이 필요한 경우, return 키워드를 반드시 사용해야 합니다.
  • 6. 정리

  • 람다식과 익명 메서드는 코드를 간결하게 작성하는 데 큰 도움이 됩니다.
  • 실무에서 데이터 처리나 이벤트 핸들링 시 자주 사용됩니다.
  • 람다식은 짧고 간결한 함수 표현을 제공하며, 익명 메서드는 필요할 때 즉석에서 함수를 정의할 수 있습니다.
  • 다음에 학습하면 좋은 주제: LINQ 쿼리, 델리게이트와 이벤트, 고차 함수.