🔗 출처 : https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/operators/lambda-expressions
람다가 나오면서부터는 사실 익명 메소드는 쓰이지 않고 있다.
익명 메소드란 이름이 없는 메소드로, 일회성 메소드에 사용된다. 주로 델리게이트에 전달되는 메소드가 일회성으로 필요할 때 사용된다.
람다는 C# 2.0에서 나온 익명 메소드를 C# 3.0에서 발전시킨 형태이므로 람다식에 대해 본격적으로 알아보기 전에 우선 익명 메소드부터 살펴보자!
익명 메소드 정의는 다음과 같다.
델리게이트 변수 = delegate(매개변수 목록)
{
// 실행할 코드
};
이를 코드에서 활용하면 다음과 같다.
public class lambda1 : MonoBehaviour
{
delegate void TestDelegate();
private void Start()
{
TestDelegate testDelegate;
testDelegate = delegate()
{
Debug.Log("TestFunction");
};
testDelegate.Invoke();
}
}
디버깅은 어렵지만 유지보수가 쉬워지는 델리게이트의 일종인 람다는 C# 컴파일러에 의해 익명 메소드가 확장되는 형태이다.
익명 메소드를 발전시킨 람다의 정의는 다음과 같다.
형태가 축약된 느낌이다!
델리게이트 변수 = (매개변수 목록) => 식;
이를 코드에서 활용하면 다음과 같다.
// 예 1
public class lambda2 : MonoBehaviour
{
delegate void TestDelegate();
private void Start()
{
TestDelegate testDelegate;
testDelegate = () => Debug.Log("TestFunction");
testDelegate.Invoke();
}
}
// 예 2
public class lambda2_1 : MonoBehaviour
{
delegate int TestDelegate(int num1, int num2);
private void Start()
{
TestDelegate testDelegate;
testDelegate = (num1, num2) => num1 + num2;
int result = testDelegate.Invoke(2, 3);
Debug.Log(result);
}
}
람다로 식 뿐만 아니라 문 형식 정의가 가능하다.
델리게이트 변수 = (매개변수 목록) =>
{
문장1;
문장2;
문장3;
}
예를 들어서 아래 코드와 같다.
public class lambda2_2 : MonoBehaviour
{
delegate int TestDelegate(int num1, int num2);
private void Start()
{
TestDelegate testDelegate;
testDelegate = (num1, num2) =>
{
num1 + num2;
// 여러 줄의 문 형식이 가능함
};
int result = testDelegate.Invoke(2, 3);
Debug.Log(result);
}
}
람다에도 단점이 있는데, 델리게이트 체인의 해제
를 할 수 없다는 것이다. (근데 또 연결은 가능...!)
람다도 델리게이트의 일종이므로 코드 분석이 어렵다는 단점도 있다.