[C#] 람다 (Lambda)

박현민·2024년 11월 28일

유니티

목록 보기
4/6
post-thumbnail

코드를 간단하게 표현할 수 있게 해주는 기능

람다식 (Lambda Expression)은 코드의 간결함과 가독성을 높혀주는 익명 매서드이다.

람다식을 알기 위해서 우리는 익명 매서드에 대하여 알아야한다.

익명 매서드란?


익명 매서드란 매서드가 정의 없이 몸체 (기능)만 있는 매서드이다.

using UnityEngine;
using System;

public class Test : MonoBehaviour
{
		delegate int Sum(int a, int b);
		
		private void Start()
		{
				Sum sum = Add;
				Debug.Log(sum(10, 20));
		}
		
		public int Add(int a, int b)
		{
				return a + b;
		}
}
// 30 출력

이렇게 원래 델리게이트를 사용할 떄에는 미리 정의되어있던, 매서드를 넣어주어 사용을 했다.

하지만 여기서 delegate 키워드를 사용하여 매서드 정의 없이도 사용할 수 있다.

using UnityEngine;
using System;

public class Test : MonoBehaviour
{
		delegate int Sum(int a, int b);
		
		private void Start()
		{
				Sum sum = delegate(int a, in b)
				{
						return a + b;
					};
				Debug.Log(sum(10, 20));
		}
}
// 30 출력

델리게이트에 넣어줄 매서드를 정의하지 않고, delegate 키워드를 사용하여 매서드 안의 기능들을 적어주면 익명 매서드를 만들어줄 수 있다.

람다식이란?


람다식은 위의 익명 매서드를 더욱 더 간단하게 표현하게 해주는 것이다.

using UnityEngine;
using System;

public class Test : MonoBehaviour
{
		delegate int Sum(int a, int b);
		
		private void Start()
		{
				Sum sum = (int a, int b) => a + b;
				Debug.Log(sum(10, 20));
		}
}
// 30 출력

여기서 (int a, int b) 는 람다식의 매개변수이고, ⇒를 사용하여 매서드의 기능을 구분한다.

위 코드와 같이 한줄로 끝나는 간단한 코드는 중괄호를 생랼해도 된다.

장단점


장점

  • 익명 함수 작성을 통해 매서드를 정의하지 않고도 함수를 작성할 수 있어 코드의 유연성이 증가 한다.
  • LINQ 및 UnityEvent와 같은 곳에서 간결하게 사용할 수 있다.
    onClicked.AddListener(() => Debug.Log("Button clicked!"));
  • 작은 작업을 수행하는 매서드를 간단하게 표현할 수 있으므로, 깔끔한 코드를 유지할 수 있다.

단점

  • 익명 함수이기에 독립적으로 호출할 수 없어 테스트하기 어렵다.
  • 델리게이트나 다른 대리자들과의 연결 해제 문제가 있을 수 있다.
    public event Action<int> myEvent;
    
    private void Start()
    {
    		myEvent += (int x) => Debug.Log(x);
    		myEvent -= (int x) => Debug.Log(x); // 작동 안함!
    }
profile
자라고 있는 게임개발자

0개의 댓글