C# 3.0 문법 | 람다식 (+ C# 2.0 익명 메소드)

seunghyun·2024년 9월 16일
0

🔗 출처 : 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);
    }
}

람다의 단점

람다에도 단점이 있는데, 델리게이트 체인의 해제를 할 수 없다는 것이다. (근데 또 연결은 가능...!)

  • 굳이 해제를 하려면 null을 대입해주고 다시 연결을 할 수는 있기는 한데... 차라리 구독 개념으로 만드는 것이 추천된다.

람다도 델리게이트의 일종이므로 코드 분석이 어렵다는 단점도 있다.

  • 즉 구독, 사용에는 편하지만 참조에 대한 디버깅이 어렵다.
profile
game client programmer

0개의 댓글