▣ 람다식(Lambda Expression)이란?
람다식은 익명 함수를 생성하는 간결한 방법입니다.
C#에서 메서드를 정의하지 않고도 함수나 연산을 간단하게 표현할 수 있습니다.
람다식은 주로 델리게이트(Delegate) 또는 이벤트(Event)와 함께 사용됩니다.
▣ 람다식의 기본 형태는 다음과 같습니다:
(매개변수) => 식;
▣ 람다식의 기본 구조
매개변수: 메서드처럼 여러 개의 매개변수를 가질 수 있습니다. 매개변수가 하나일 경우 괄호 ()를 생략할 수 있습니다.
화살표 연산자 (=>): 매개변수와 본문을 구분합니다.
본문: 단일 식일 수 있으며, 이 식의 결과가 반환됩니다. 여러 줄의 코드가 필요한 경우 중괄호 {}를 사용하고, 명시적으로 return 키워드를 사용해야 합니다.
▣ Func는 C#에서 제네릭 델리게이트(delegate)로, 하나 이상의 입력 매개변수를 받아 결과를 반환하는 메서드를 참조할 수 있는 타입을 정의합니다. Func는 .NET에서 제공하는 내장 델리게이트 중 하나로, 특히 람다식과 함께 자주 사용됩니다.
▣ 언제 Func를 사용하는가?
Func 델리게이트는 다음과 같은 경우에 유용합니다:
- 메서드 참조: 특정 메서드를 변수에 할당하거나 다른 메서드의 매개변수로 전달하고 싶을 때.
- 람다식 사용: 간단한 연산이나 로직을 인라인으로 정의하고 사용할 때.
- LINQ 쿼리: LINQ 쿼리에서 람다식을 사용하여 컬렉션을 필터링, 정렬, 변환할 때.
▣ Func<int, int>: 첫 번째 int는 입력 매개변수 x의 타입을 나타내고, 두 번째 int는 반환 타입을 나타냅니다.
▣ getLength = str => str.Length;:
getLength라는 이름의 델리게이트 변수에 람다식을 할당합니다.
str => str.Length는 입력된 문자열 str의 길이(문자 개수)를 반환하는 람다식입니다.
예를 들어, "Hello"라는 문자열을 입력하면, "Hello"의 길이인 5를 반환합니다.
▣ Func<int, int, int>는 다음과 같은 의미를 가집니다:
첫 번째 int: 첫 번째 매개변수의 타입 (a).
두 번째 int: 두 번째 매개변수의 타입 (b).
세 번째 int: 반환 값의 타입.
▣ List<int> evenNumbers = numbers.Where(n => n % 2 == 0).ToList();
▣ numbers.Where(n => n % 2 == 0):
Where 메서드는 LINQ (Language Integrated Query) 메서드 중 하나로, 리스트에서 특정 조건을 만족하는 요소들만 선택합니다.
n => n % 2 == 0은 람다식으로, n이 짝수인지 확인하는 조건입니다.
n % 2는 n을 2로 나눈 나머지를 의미합니다. 만약 나머지가 0이라면 n은 짝수입니다.
이 조건에 따라 numbers 리스트에서 짝수인 2와 4만 선택됩니다.
▣ .ToList():
Where 메서드가 반환하는 IEnumerable<T> 타입의 데이터를 List<int> 타입으로 변환하기 위해 사용됩니다.
결과적으로, 선택된 요소들이 List<int> 타입의 새로운 리스트에 저장됩니다.
결과: evenNumbers 리스트에는 [2, 4]라는 짝수들만 저장됩니다.
▣ foreach (var num in evenNumbers) { Debug.Log(num); }
foreach 루프:
evenNumbers 리스트의 각 요소를 num이라는 변수에 할당하며 루프를 순회합니다.
▣ names.Find(name => name.StartsWith("C")):
Find 메서드는 리스트에서 특정 조건을 만족하는 첫 번째 요소를 찾습니다.
name => name.StartsWith("C")는 람다식으로, name이라는 문자열이 "C"로 시작하는지를 확인하는 조건입니다.
▣ name.StartsWith("C") 메서드는 문자열이 "C"로 시작하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
이 조건에 따라 names 리스트에서 "Charlie"가 선택됩니다. "Charlie"는 "C"로 시작하는 첫 번째 이름입니다.
결과: nameWithC 변수에는 "Charlie"가 저장됩니다.
▣ ages.Count(age => age >= 18):
Count 메서드는 리스트에서 특정 조건을 만족하는 요소의 개수를 셉니다.
age => age >= 18은 람다식으로, 각 나이가 18 이상인지를 확인하는 조건입니다.
age >= 18 조건을 만족하는 요소의 개수를 셉니다.
이 조건에 따라 ages 리스트에서 18, 22, 30, 45가 해당 조건을 만족하며, 총 4개의 요소가 해당됩니다.
결과: adultCount 변수에는 4가 저장됩니다.
▣ 유니티에서 람다식 사용의 장점
유니티에서는 다양한 시나리오에서 람다식을 사용하면 코드가 간결해지고, 개발 속도가 빨라집니다. 특히, 아래와 같은 상황에서 유용합니다:
이벤트 처리: 버튼 클릭이나 충돌 감지와 같은 이벤트에 대해 간단한 콜백을 지정할 때 사용됩니다.
LINQ 쿼리: 리스트나 배열을 처리할 때 람다식을 사용하여 간결한 데이터 필터링이나 정렬을 수행할 수 있습니다.
코드 간결화: 간단한 작업을 위해 별도의 메서드를 정의할 필요 없이 람다식을 사용하여 코드를 간결하게 유지할 수 있습니다.
▣ 람다식의 사용 시기
람다식은 다음과 같은 상황에서 사용하기 좋습니다:
간단한 콜백 함수: 이벤트 핸들러나 비동기 작업의 콜백으로 사용될 때, 메서드를 별도로 정의하지 않고 직접 람다식으로 정의합니다.
간단한 연산: 코드의 다른 부분에서 재사용할 필요가 없는 간단한 연산을 수행할 때 사용됩니다.
데이터 처리: LINQ와 함께 리스트나 배열에서 데이터를 필터링, 정렬, 변환할 때 사용됩니다.
▣ 왜 람다식을 사용하는가?
코드의 간결성: 메서드를 정의하는 번거로움 없이 간단한 작업을 처리할 수 있습니다.
가독성 향상: 코드의 의도를 명확하게 표현할 수 있습니다.
유연성: 델리게이트, 이벤트, LINQ와 결합하여 다양한 시나리오에 유연하게 대응할 수 있습니다.
▣ 결론
람다식은 유니티 개발에서 코드의 간결성과 가독성을 높여주는 강력한 도구입니다. 특히 이벤트 처리, 비동기 작업, 데이터 처리에서 유용하게 사용할 수 있으며, 이를 통해 더욱 효율적인 코드 작성을 할 수 있습니다.
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/lambda-expressions
'[ Unity ] > - 유니티 실습' 카테고리의 다른 글
유니티 메모리 구조 (스택, 힙, 데이터, 정적변수, 지역변수, 전역변수) (0) | 2024.08.31 |
---|---|
유니티 Delegate (0) | 2024.08.31 |
유니티 interface (0) | 2024.08.13 |
유니티 abstract (0) | 2024.08.13 |
유니티 virtual, override (0) | 2024.08.13 |
댓글