1. 익명 함수 : Anonymous Method
- 이름이 없는 함수
- 일회용 함수
- 람다 함수 선행 과정
- 사용처: 델리게이트의 인자로 함수를 전달할 때 사용
- C# 2.0 지원
- 시그니처(Signature): 함수의 매개변수 목록 + 반환 값
- 익명 메소드 정의
델리게이트변수 = delegate(매개변수목록){
함수 코드
}
1-1. 매개변수X 익명 함수
delegate void TestDelegate();
private void Start()
{
TestDelegate testDelegate;
testDelegate = delegate()
{
Debug.Log("Test Anonymous Function");
};
testDelegate.Invoke();
}
1-2. 매개변수O 익명 함수
delegate int TestDelegate2(int num1, int num2);
private void Start()
{
TestDelegate2 testDelegate2;
testDelegate2 = delegate (int num1, int num2)
{
return num1 + num2;
};
int result = testDelegate2.Invoke(3, 5);
Debug.Log(result);
}
2. 람다 함수 : Lambda
- 람다 함수은
익명 메소드
를 개선해 간단히 작성하는 방식
- C# 3.0 지원
- 익명 함수와 차이
- delegate가 없음
- 대괄호({}) 사라짐
- 화살표 연산자(=>) 추가
- 익명 함수와 형태만 다를 뿐 동일
- 컴파일러가 내부적으로 익명 함수로 자동 변환
델리게이트변수 = (매개변수목록) => 함수 코드;
2-1. 매개변수X 람다 함수
delegate void TestDelegate();
private void Start()
{
TestDelegate testDel;
testDel = () => Debug.Log("TestFunction");
testDel.Invoke();
}
2-2. 매개변수O 람다함수
delegate int TestDelegate(int A, int B);
private void Start(){
TestDelegate testDel;
testDel = (int num1, int num2) => num1 + num2;
testDel = (num1, num2) => num1 + num2;
int result = testDel.Invoke(3, 5);
Debug.Log(result);
2-3. 문 형식 람다함수
- 중괄호({})를 사용해 여러 코드 블록을 수행
delegate int TestDelegate(int A, int B);
private void Start(){
TestDelegate testDel;
testDel = (int num1, int num2) => {
Debug.Log(num1);
Debug.Log(num2);
return num1 + num2;
};
int result = testDel.Invoke(3, 5);
Debug.Log(result);
2-4. 람다의 장점
2-5. 람다의 단점
- 1. 델리게이트와 마찬가지로 참조를 확인하기 어렵다.
- 2. 델리게이트 체인 관리가 어렵다.
- 델리게이트 대입(=), 덧셈(+) 연산 가능
- 델리게이트 뺄셈(-) 연산 불가능
- [지양]굳이 해제하려면 델리게이트 변수에 null 할당
testDel = null;
- 즉, 델리게이트 단일로 사용할 경우 람다식 사용
- 델리게이트 체인을 사용할 경우 람다식 사용 X