NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# 35-1. 람다식. (Lambda Expression.)

    페이지 정보

    본문

    안녕하세요. 소심비형입니다. 오늘은 람다식에 대해 알아보도록 하겠습니다. 람다식은 대리자 또는 LINQ의 동적 쿼리를 생성하거나 실행할 수 있는 Expression Trees를 생성할 때 사용할 수 있는 익명 함수입니다. 익명 함수는 2가지로 분류되는데요. 무명 메소드(Method)와 람다 식(Lambda Expression)입니다. 무명 메소드는 .NET 2.0부터 있어왔고, 익명 함수는 .NET 3.0에 추가된 기능입니다. 이 둘은 미묘한 차이가 있습니다-_-;

    9LprI2a.png

     

     

    지금까지 사용된 예제에서 가끔씩 무명 메소드와 람다 식이 사용되었습니다. 명명 메소드보다 편리하기도 하고 코딩 오버헤드를 줄일 수 있기 때문이죠. 그외에도 일회성 메소드인 경우에는 대부분이 람다식을 사용하고 있기도 합니다. 특히 배열을 다루는 경우 링큐와 함께 익명 형식과 람다 식 또는 람다 문은 아주 강력한 기능을 제공합니다.

    아래 간단한 예제를 보면서 람다 식이 무엇인지 확인 해보세요.

    using System;
    
    namespace SimpleLambda
    {
        class MainApp
        {
            delegate int Calculate(int a, int b); static void Main(string[] args)
            {
                // 람다 식            
                Calculate calc = (a, b) => a + b;
     
                // 람다 문            
                //Calculate calc = (a, b) => { return a + b; };
                // 무명 메소드
                //Calculate calc = delegate(int a, int b) { return a + b; };
     
                Console.WriteLine("{0} + {1} = {2}", 3, 4, calc(3, 4));
                Console.ReadKey();
            }
        }
    }
    

     

     

    먼저 12라인의 람다 식은 => 연산자를 통해 생성합니다. 왼쪽에 입력 매개 변수를 지정하고 오른쪽에 식을 만듭니다. 위의 경우에는 a와 b 두개 인자를 받은 후 a와 b를 더한 값을 반환합니다. 이는 7라인의 대라자를 통해 알 수 있습니다. 15라인은 람다 문입니다. 18라인의 무명 메소드와 동일합니다. 중괄호를 이용해서 메소드처럼 문을 만들 수 있습니다. 이 코드를 실행하면 아래와 같은 결과를 확인할 수 있습니다. 물론, 15, 18라인의 주석을 풀면서 실행해도 동일한 결과가 표시됩니다.

    WhJft0j.jpg

     

     

    람다 문은 람다 식으로 처리할 수 없는 복잡한 명령을 처리할 수 있습니다. 아래 예제를 통해 람다식과 람다문의 차이를 알 수 있습니다.

    using System;
    
    namespace StatementLambda
    {
        class MainApp
        {
            delegate string Concatenate(string[] args); 
            static void Main(string[] args)
            {
                Concatenate concat = (arr) => {
                                              string result = ""; 
                                              foreach (string s in arr) 
                                              result += (s + Environment.NewLine); 
                                              return result; 
                                              };
                Console.WriteLine(concat(args));
                Console.ReadKey();
            }
        }
    }
    

     

     

    이 응용 프로그램을 비주얼 스튜디오에서 실행하려면 아래처럼 명령줄 인수에 값을 입력하세요.

    Un0OuVr.png

     

     

    위 코드를 익명 메소드로 변환하는 것은 간단합니다. 아래처럼 12라인만 수정하면 되죠.

    using System;
    
    namespace StatementLambda
    {
        class MainApp
        {
            delegate string Concatenate(string[] args); static void Main(string[] args)
            {
                Concatenate concat = delegate (string[] arr)
                { string result = ""; foreach (string s in arr) result += (s + Environment.NewLine); return result; };
                Console.WriteLine(concat(args));
                Console.ReadKey();
            }
        }
    }

     

     

    결과는 동일합니다. 이 둘은 동일하나 무명 메소드의 경우 대리자가 매개 변수를 가지지 않는다면 매개 변수 목록을 생략할 수 있습니다. 하지만, 람다식 또는 람다문은 매개 변수가 없더라도 목록에 빈 값을 표시합니다. 다시 말해서 익명 함수는 매개 변수를 전달하는 괄호를 생략할 수 있다는 의미입니다.

    using System;
    
    namespace StatementLambda
    {
        class MainApp
        {
            delegate void Concatenate(); static void Main(string[] args)
            {
                Concatenate concat = delegate
                { Console.WriteLine("Hello NGMASTER!"); };
                concat();
                Console.ReadKey();
            }
        }
    }
    

     

     

    다음 시간에...

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.