ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 람다식(Lambda)
    C# 2022. 1. 26. 15:11

    1. 무명함수(익명함수)

    using System;
    using System.Collections.Generic;
    
    namespace CSharp
    {
        enum ItemType
        {
            Weapon,
            Armor,
            Amulet,
            Ring
        }
        enum Rarity
        {
            Normal,
            Uncommon,
            Rare,
        }
        class Item
        {
            public ItemType ItemType;
            public Rarity Rarity;
        }
        class Program
        {
            static List<Item> _items = new List<Item>();
            delegate bool ItemSelector(Item item);
            static bool IsWeapon(Item item)
            {
                return item.ItemType == ItemType.Weapon;
            }
            static Item FindItem(ItemSelector selector)
            {
                foreach(Item item in _items)
                {
                    if (selector(item))
                        return item;
                }
                return null;
            }
    
            static void Main(string[] args)
            {
                _items.Add(new Item() { ItemType = ItemType.Weapon, Rarity = Rarity.Normal });
                _items.Add(new Item() { ItemType = ItemType.Armor, Rarity = Rarity.Uncommon });
                _items.Add(new Item() { ItemType = ItemType.Ring, Rarity = Rarity.Rare });
    
                Item item = FindItem(IsWeapon);
            }
        }
    }

    위의 코드가 있다고 할 때 무언가 복잡해보이니 전부 분석할 필요는 없다.

            static bool IsWeapon(Item item)
            {
                return item.ItemType == ItemType.Weapon;
            }
                Item item = FindItem(IsWeapon); // 메인함수에 있는 코드

    IsWeapon가 bool값을 출력한다는 사실과 메인함수에서 사용된다는 것만 봐보자.

    여기서 IsWeapon은 1번만 사용하고 싶을 때 굳이 정의까지 해주는 것은 귀찮을 수도 있다.

    그럴 때 무명함수를 사용하면 FindItem의 인자로 함수의 식을 넣어줄 수 있다.

     

    무명함수 표현방법

    Item item = FindItem(delegate (Item item) { return item.ItemType == ItemType.Weapon; });

    delegate키워드를 이용하고 IsWeapon의 매개변수와 함수의 내용만 복사하여 인자로 받았다.

     

    2. 람다식(Lambda)

    프로그래머들은 delegate를 붙이는 것도 귀찮았는지 람다식을 만들었는데 아래와 같이 표현을 한다.

    람다식 표현방법

    Item item = FindItem( (Item item) => { return item.ItemType == ItemType.Weapon; });

    Item item형의 함수를 입력 받아서 함수의 내용을 반환하라는 뜻으로 해석하면 된다.

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

    리플렉션(Reflection)  (0) 2022.01.26
    예외처리  (0) 2022.01.26
    이벤트(Event)  (0) 2022.01.26
    대리자(Delegate)  (0) 2022.01.25
    프로퍼티(Property)  (0) 2022.01.25
Designed by Tistory.