본문 바로가기

프로그래밍/C#

[C#] 람다식

반응형

람다식이란

람다식은 익명함수(anonymous function)을 생성하기 위한 식으로 객체 지향 언어보단 함수 지향 언어에 가까운 프로그래밍 기법이다. 함수형 프로그래밍은 병렬처리와 이벤트 지향 프로그래밍에 적합하며, 주로 고차 함수에 인자로 전달되거나 고차 함수가 돌려주는 결과값으로 쓰인다. C#에서는 LINQ에 응용하기 위해서도 사용된다.

장점

- 코드의 간결성 : 불필요한 루프문의 삭제 가능, 동일한 함수 재사용 가능

- 필요한 정보만을 사용하는 방식을 통한 퍼포먼스 향상

람다식의 기본

 

   매개변수 =>

 

좌측에 있는 매개변수들을 우측의 식에 대입하는 형식

C# 컴파일러에서는 매개변수의 형식을 유추하는 '형식 유추'기능을 사용함으로

매개변수의 형식을 생략함으로써 코드를 더 간결하게 작성할 수 있음

 

 

 

 

예제


        delegate int Cal(int a, int b);
        static void Main(string[] args)
        {
            Cal cal = (a, b) => a + b; // 1번, 덧셈연산 (식형식)

            Console.WriteLine($"1 + 2 = {cal(1, 2)}");

            cal = (a, b) => // 2번, 뺄셈연산 (문형식)
            {
                int result = a - b;
                return result;
            };

            Console.WriteLine($"1 - 2 = {cal(1, 2)}");
        }

 

결과

1 + 2 =

1 - 2 = -1 

 

 

 

 

 

Func과 Action

위 예제에서는 델리게이트를 직접 선언하여 람다식을 사용하였지만, .NET 프레임워크에서는 Func과 Action이라는 대리자를 미리 선언하여 이를 이용하여 간단하게 람다식을 작성할 수 있다.

 

예제


//델리게이트가 필요 없다!
        static void Main(string[] args)
        {
            Func<int, int, int> sum = (a, b) => a + b;
            Func<int, int, int> sub = (a, b) =>
            {
                int result = a - b;
                return result;
            };

            Console.WriteLine("Func Lambda");
            Console.WriteLine($"1 + 2 = {sum(1, 2)}");
            Console.WriteLine($"1 - 2 = {sub(1, 2)}");
            Console.WriteLine();

            Console.WriteLine("Action Lambda");
            Action<int, int> sum2 = (a, b) => Console.WriteLine($"{a} + {b} = {a + b}");
            Action<int, int> sub2 = (a, b) => Console.WriteLine($"{a} - {b} = {a - b}");
            sum2(3, 4);
            sub2(3, 4);
        }

 

결과

 

Func Lambda

1 + 2 = 3

1 - 2 = -1

 

Action Lambda

3 + 4 = 7

3 - 4 = -1

 

 

Action과 Func에 대한 자세한 내용은 아래 MSDN 참조

(간단한 내용이지만 분량이 너무 많습니다!)

 

 

 

Action Delegate (System)

Encapsulates a method that has no parameters and does not return a value.

docs.microsoft.com

 

Func Delegate (System)

Encapsulates a method that has no parameters and returns a value of the type specified by the TResult parameter.

docs.microsoft.com

 

Lambda expressions - C# reference

Learn about lambda expressions. There are expression lambdas that have an expression as its body, or statement lambdas that have a statement block as its body.

docs.microsoft.com

 

 

반응형