본문 바로가기
개발일지/Unity 3D&C#

[C#] 람다식, 람다 문(Lambda)

by 쫌눈 2022. 6. 24.
반응형

람다식은 익명함수(Anonymous functions)를 지칭하는 용어이다.

장점

  • 코드의 간결함(불필요한 루프문 삭제 가능, 재활용성 ↑)
  • 지연 연산을 통한 퍼포먼스 향상

단점

  • 모든 원소를 전부 순회하는 경우, 효율성 ↓
  • 코드의 가독성 ↓
  • 디버깅시 함수 콜스택 추적이 어려움

람다식은 람다 연산자를 사용한다. =>

Func대리자를 통해 예제를 만들어보자

using System;

namespace ConsoleApp1
{
    internal class Lamda1
    {
        static void Main(string[] args)
        {
            Console.WriteLine(IsAdult(25));
        }

        public static string IsAdult(int age)
        {
            if (age > 19)
            {
                return "성인";
            }
            else
            {
                return "미성년";
            }
        }
    }
}

위의 코드를 람다식을 이용해 보겠다.

Func대리자와 Action대리자를 사용할 예정이니 모르는 분들은 아래 링크를 참고해주길 바란다.

https://jjomnoon-diary.tistory.com/33?category=929610 

 

[C#] 델리게이트(delegate) - Func, Action, Predicate

c#에서는 delegate(대리자)를 사용하여 메서드를 매개변수로 전달하는 방법이 3가지가 있다. Func Action Predicate Func형 델리게이트 입력 매개 변수와 반환 값이 존재한다. 입력 매개변수는 필수는 아니

jjomnoon-diary.tistory.com

Func 대리자

using System;

namespace ConsoleApp1
{
    internal class Lamda1
    {
        static void Main(string[] args)
        {
            Func<int, string> isAdult = (age) => age > 19 ? "성인" : "미성년";
            Console.WriteLine(isAdult(25));
        }
    }
}

메서드가 사라졌으며 코드가 매우 간결해 졌다.

Action 대리자

using System;

namespace ConsoleApp1
{
    internal class Lamda1
    {
        static void Main(string[] args)
        {
            Action<int> isAdult = age => age > 19 ? Console.WriteLine("성인") : Console.WriteLine("미성년");

            isAdult(25);
        }
    }
}

위와같이 했더니 에러가 났다

오류 CS0201 대입, 호출, 증가, 감소 및 새 개체 식만 문으로 사용할 수 있습니다.

그래서 다른방법으로,,,, 람다문을 이용했다.

using System;

namespace ConsoleApp1
{
    internal class Lamda1
    {
        static void Main(string[] args)
        {
            Action<int> isAdult = age =>
            {
                if (age > 19)
                    Console.WriteLine("성인");
                else
                    Console.WriteLine("미성년");
            };

            isAdult(25);
        }
    }
}

Action은 삼항연산자를 사용을 못하나..?
아시는분들은 댓글좀,,,,, ㅠㅠㅠㅠ
😭😭😭😭😭

로컬 대리자

using System;

namespace ConsoleApp1
{
    internal class Lamda1
    {
        static void Main(string[] args)
        {
            int PlusFunc(int a, int b) => a + b;
            Console.WriteLine(PlusFunc(5,10));
            
            void MultiFunc(int a, int b) => Console.WriteLine(a * b);
            MultiFunc(5, 10);
        }
    }
}

로컬대리자는 로컬에서만 사용할 수 있다.

 

포스팅에 오류가 있거나 오타가 있다면 댓글로 알려주시기 바랍니다.

도움이 되셨다면 공감버튼을 눌러주세요.🥰

 

 

참고 : https://developer-talk.tistory.com/437

반응형

댓글