-
람다식(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