[Unity/C#]람다 함수(Lambda)

강동현·2024년 1월 22일
0

Unity/C#

목록 보기
13/26

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 지원
  • 익명 함수와 차이
    1. delegate가 없음
    2. 대괄호({}) 사라짐
    3. 화살표 연산자(=>) 추가
  • 익명 함수와 형태만 다를 뿐 동일
  • 컴파일러내부적으로 익명 함수자동 변환
델리게이트변수 = (매개변수목록) => 함수 코드;

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
profile
GAME DESIGN & CLIENT PROGRAMMING

0개의 댓글