C#
무명 함수 [ Anonymous Method] 와 람다식 - 1
Korokke
2022. 4. 11. 03:05
이번 포스트에서는 무명 함수와 람다식에 대해 정리해 보겠다.
간단한 함수로 예를 들어보자
public class Test : MonoBehaviour
{
int a = 1;
int b = 1;
int sum;
void Add()
{
sum = a + b;
Back();
}
void Back()
{
sum = 0;
}
}
Add 를 한 뒤에 sum을 다시 0으로 초기화 해주기 위해 Back 이라는 함수를 만들었다.
하지만 Add 함수에 Back을 사용할 경우 Back 함수는 Add 함수에 종속이 되어버린다.
이것을 해결하기 위해 최근 정리한 Delegate를 사용하면 된다.
public class Test : MonoBehaviour
{
int a = 1;
int b = 1;
int sum;
void Add()
{
sum = a + b;
}
void Back()
{
sum = 0;
}
delegate void MyDelegate();
MyDelegate myDelegate;
private void Start()
{
myDelegate = Add;
myDelegate += Back;
myDelegate();
}
}
원하는 대로 Add 함수 이후에 Back 함수를 실행 할 수 있게 됐다.
그런데 Add 와 Back 함수 사이에 프린트를 하는 함수를 넣고 싶어졌다. (사실 Add 에서 프린트를 그냥 하면 되지만 무명함수와 람다식을 익히기 위해서 함수로 만든다고 가정하자)
void Print()
{
print(sum);
}
하지만 이 Print 함수는 지금 Delegate 말고 쓸 일이 없을 것 같은 함수이다.
이때, 무명 함수를 사용하면 된다.
무명 함수의 특징
다른 함수들과 달리 이름이 없고, 대신에 delegate 키워드를 사용한다. 또한, Delegate를 통해서만 호출이 가능하다.
private void Start()
{
myDelegate = Add;
// 무명 함수
myDelegate += delegate () { print(sum); };
myDelegate += Back;
myDelegate();
}
람다식
람다식은 delegate같은 불필요한 키워드나 중괄호가 빠져있어 무명 함수보다 훨씬 단순하다. 람다식은 무명 함수를 단순화 한 식으로 생각하자.
람다식의 기본 문법
// 매개 변수 a를 받고, 그 a를 반환하는 람다식
(int a) => return a;
위에 작성했던 무명 함수와 같은 동작을 하는 람다식
private void Start()
{
myDelegate = Add;
// 무명 함수
myDelegate += delegate () { print(sum); };
// 람다식
myDelegate += () => print(sum);
myDelegate += Back;
myDelegate();
}
위에 작성한 코드들을 간략화한 람다식
delegate void MyDelegate<T>(T a, T b);
MyDelegate<int> myDelegate;
private void Start()
{
myDelegate += (int a, int b) => print(a + b);
myDelegate(1, 2);
}