I'm FanJae.

[20260519] C# 정리 ( Lambda Expression ) 본문

Unity/Unity 초격차캠프

[20260519] C# 정리 ( Lambda Expression )

FanJae 2026. 5. 19. 21:43

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
Comments