학습
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); // 타입을 명시하지 않음
실수 2: 익명 메서드의 반환 타입 누락
// 잘못된 코드
MathOperation add = delegate (int x, int y) { x + y; }; // 반환문 없이 작성
return 키워드를 반드시 사용해야 합니다.