본문 바로가기

C# 일기

20. 람다식(Lambda Expression)

프로그램을 설계하면서, 간혹 한번만 사용하고싶은 함수가 있을 때가 있다.

 

이번 한번만 사용하고, 이후에 다시 재사용할 일이 없을 것 같아서 따로 함수를 선언하기 애매한 일회용 함수들.

 

혹은, 매개변수를 넘길 때, 기존의 값을 연산한 값으로 넘기고 싶을 때가 있다. 예를 들면 이런 식으로 말이다.

public delegate int Calculate(int a, int b);
static void Main(string[] args)
{
   Calculate cal;
   cal = delegate(int a, int b)
   {
      return a + b;
   };
}

이렇게 함은, 대리자에 메서드를 전달하고 싶을 때, 기존의 메서드를 이용할 수는 없고, 그렇다고 새로 만들자니 다시 사용할 일 없는 함수를 전달하고자 할 때, 익명의 함수를 작성하여 대리자에게 넘겨주는 것이다.

 

위의 식이 다소 길어지고, 가독성에 있어서도 읽기 어려운 부분이 있기 때문에, 가독성은 올리고, 작성도 간편한 방법을 사용하게 되는데, 이것이 바로 람다식이다.

 

람다식은 익명의 메서드를 간단히 작성하여 대입할 수 있도록 하는 것이다. 매개변수에 함수를 전달하는 대리자를 인스턴스하여 대입하는 대신, 간단한 함수식을 작성하여 념겨주는 것이다.

 

람다식의 이용예는 다음과 같다. 위의 식과 동일한 결과가 나오도록 작성해보겠다.

 

public delegate int Calculate(int a, int b);

static void Main(string[] args)
{
   Calculate cal;
   cal = (a,b) => a + b;
}

 

위 람다식을 사용한 cal의 반환값과, 익명 메서드를 직접 작성한 cal의 값은 동일하다.

 

람다식은 소괄호 안에 사용할 매개변수를 지정하고, 해당 매개변수를 통한 식의 내용을 => 을 붙여 정의하는 것이다.

 

위에서는 대리자 Calculate의 반환값이 int이기 때문에 매개변수를 설정할 때 자료형 int를 선언하지 않아도, 추론가능한 영역 내에 있어서 자동으로 int로 형변환 되었지만, 그렇지 않은 경우에는 자료형을 같이 선언해주는 것이 좋다.

 

   

'C# 일기' 카테고리의 다른 글

22. this와 this생성자 this()  (0) 2024.03.12
21. 일반화 대리자 Func VS Action  (0) 2024.03.12
19 - 1. 이벤트 VS 대리자  (0) 2024.03.11
19. 이벤트(Event)  (0) 2024.03.11
18. 대리자 (Delegate)  (0) 2024.03.11