| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- Network Programming
- git
- System Programming
- Data Structure
- BOJ
- multi-thread
- PS
- C++
- 독서
- Unity
- Toy Project
- c#
- Online Judge
- Today
- Total
I'm FanJae.
[20260519] C# 정리 ( Lambda Expression ) 본문
1. 람다 표현식이란?
- 람다 표현식은 메서드를 짧게 표현하기 위해서 사용하는 문법이다.
- 일반 메서드처럼 이름을 따로 만들지 않고, 필요한 위치에서 바로 기능을 정의할 수 있다.
(a, b) => a + b
- 람다식은 주로 델리게이트 기반으로 동작하며, Func, Action, Predicate, 이벤트, LINQ 등과 함께 자주 사용된다.
2. 필요한 이유
- 람다 표현식은 짧은 기능을 굳이 메서드로 따로 만들지 않고 바로 전달하기 위해 사용한다.
- 예를 들어, Action, Func, Predicate , event , LINQ 같은 기능은 어떤 동작을 실행할지, 어떤 조건으로 검사할지를 전달해야 한다.
// 람다식을 사용하지 않는 경우
static bool IsEven(int number)
{
return number % 2 == 0;
}
Predicate<int> isEven = IsEven;
// 람다식을 사용하는 경우
Predicate<int> isEven = number => number % 2 == 0;
1. 짧은 조건식을 바로 전달할 때
2. 짧은 계산식을 바로 작성할 때
3. 이벤트 처리 코드를 간단히 작성할 때
4. LINQ에서 필터링, 정렬, 변환 조건을 전달할 때
5. 한 번만 사용할 기능을 굳이 별도 메서드로 만들지 않을 때
- 정리하면 람다 표현식은 한 번 쓰고 끝날 가능성이 높은 짧은 기능을 간단하게 작성하기 위한 문법이다.
3. 기본 형태
**(매개변수) => 실행코드**
Func<int, int, int> add (a, b) => a + b;
- 위 코드는 다음 메서드와 비슷한 역할을 한다.
static int Add(int a, int b)
{
return a + b;
}
- 다만, 람다식은 메서드가 없이 바로 함수를 구현한다.
1) 람다 연산자 (⇒)
- 람다식에서는 왼쪽에 매개 변수, 오른쪽에 실행할 코드를 작성한다.
x => x * 2;
int mul(int x)
{
return x * 2;
}
2) Property, Method에서의 활용 (Expression-bodied member)
// 읽기 전용 프로퍼티
public int Hp => hp;
// 메서드
public int GetHp() => hp;
- 위와 같이 읽기 전용 프로퍼티나 메서드를 하나의 식으로 간단하게 작성 가능하다. 이와 같은 문법을 식 본문 멤버(Expression-bodied member)라고 표현한다.
4. 람다식 예시
1) 값을 반환하는 람다식 - Func
Func<int, int, int> add = (a, b) => a + b;
// 여기서 주의할 점은, add가 람다 표현식의 이름이 아님.
// Func 변수의 이름임.
Func<int, int, int>
int result = add(1, 2);
Console.WriteLine(result);
- Func는 값을 반환하는 델리게이트다.
- 마지막 타입이 반환 타입이다.
Func<int, int, int>
// 이 경우, int 매개변수 2개를 받고, int를 반환한다.
2) 매개변수가 1개인 경우
Func<int, int> doubleValue = x => x * 2;
//
int doubleValue(int x)
{
return x * 2;
}
- 매개 변수가 1개라면 괄호를 생략할 수 있다.
x => x * 2;
- 위와 같은 형태로 사용해도 된다.
3) 실행 코드가 여러 줄인 경우
Func<int, int, int> add = (a, b) =>
{
Console.WriteLine("숫자를 더한다");
int result = a + b;
return result;
};
//
int add(int a, int b)
{
result = a + b;
return result;
}
- 실행 코드가 여러 줄이면 함수 처럼 { } 를 사용한다.
- 이 경우, 값을 반환해야 하면 return을 이용해 반환한다.
4) 반환값이 없는 람다식 - Action
Action<string> print = message =>
{
Console.WriteLine(message);
};
// 람다식 안쓴 버전
static void PrintMessage(string message)
{
Console.WriteLine(message);
}
Action<string> print = PrintMessage;
print("Hello");
- Action은 반환값이 없는 델리게이트다.
- 한 줄이면 다음과 같이 줄이는 것이 가능하다.
Action<string> print = message => Console.WriteLine(message);
5) 매개변수가 없는 람다식
Action attack = () =>
{
Console.WriteLine("공격");
};
// 람다식 없는 버전
static void Attack()
{
Console.WriteLine("공격");
}
static void Main(string[] args)
{
Action attack = Attack;
attack();
}
6) 매개변수가 없는 람다식
Predicate<int> isEven = number => number % 2 == 0;
Console.WriteLine(isEven(10)); // True
Console.WriteLine(isEven(7)); // False
// 람다식 없는 버전
bool isEven(int number)
{
if(number % 2 == 0) return true;
else return false;
}
- Predicate<T>는 T 타입의 값을 하나 받아서 bool을 반환하는 델리게이트다.
- 조건 검사, 필터링 등에서도 자주 사용 될 수 있다.
5. 주의 사항
- 람다식은 코드를 짧게 만들 수 있지만, 항상 좋은 것은 아니다.
1) 코드가 너무 길면 일반 메서드가 낫다.
Func<int, int> calculate = x =>
{
if(x == 1) x = x * 3;
else if(x == 2) x = x * 2;
else if(x == 3) x = x * 3;
else if(x == 4) x = x * 5;
else if(x == 5) x = x * 6;
else x = x * 1;
return x;
}
int calculate(int x)
{
if(x == 1) x = x * 3;
else if(x == 2) x = x * 2;
else if(x == 3) x = x * 3;
else if(x == 4) x = x * 5;
else if(x == 5) x = x * 6;
else x = x * 1;
return x;
}
- 람다식 안에 코드가 길어지면 오히려 읽기 어렵다. 이 경우, 일반 메서드로 분리하는 것이 좋다.
2) 여러 번 재사용할 기능은 일반 메서드가 낫다.
Action print = () =>
{
Console.WriteLine($"이름 : {name}");
Console.WriteLine($"HP : {hp}");
}
static void PrintInfo(string name, int hp)
{
Console.WriteLine($"이름 : {name}");
Console.WriteLine($"HP : {hp}");
}
- 자주 사용할 함수라면 람다식보다 이름있는 메서드를 사용하는게 명확하다.
6. 정리
- 람다 표현식은 메서드를 짧게 표현하기 위한 문법이다.
(매개변수) => 실행코드
- 위와 같은 형태로 작성하며, Func , Action , Predicate , 이벤트, LINQ 등에서 자주 사용된다.
- 짧은 계산식이나 조건식에는 유용하지만, 코드가 길어지거나 여러 번 재사용 해야 한다면, 일반 메서드로 분리하는 것이 좋다.
'Unity > Unity 초격차캠프' 카테고리의 다른 글
| [20260519] C# 정리 ( 확장 메서드 ) (0) | 2026.05.19 |
|---|---|
| [20260519] C# 정리 ( LINQ ) (0) | 2026.05.19 |
| [20260518] Git 용어 정리 (0) | 2026.05.18 |
| [20260518] C# ( Exception ) (0) | 2026.05.18 |
| [20260515] C# ( Event ) (0) | 2026.05.15 |